rusoto_es/
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>Container for the parameters to the <code><a>AcceptInboundCrossClusterSearchConnection</a></code> operation.</p>
29#[derive(Clone, Debug, Default, PartialEq, Serialize)]
30#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
31pub struct AcceptInboundCrossClusterSearchConnectionRequest {
32    /// <p>The id of the inbound connection that you want to accept.</p>
33    #[serde(rename = "CrossClusterSearchConnectionId")]
34    pub cross_cluster_search_connection_id: String,
35}
36
37/// <p>The result of a <code><a>AcceptInboundCrossClusterSearchConnection</a></code> operation. Contains details of accepted inbound connection.</p>
38#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
39#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
40pub struct AcceptInboundCrossClusterSearchConnectionResponse {
41    /// <p>Specifies the <code><a>InboundCrossClusterSearchConnection</a></code> of accepted inbound connection. </p>
42    #[serde(rename = "CrossClusterSearchConnection")]
43    #[serde(skip_serializing_if = "Option::is_none")]
44    pub cross_cluster_search_connection: Option<InboundCrossClusterSearchConnection>,
45}
46
47/// <p>The configured access rules for the domain's document and search endpoints, and the current status of those rules.</p>
48#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
49#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
50pub struct AccessPoliciesStatus {
51    /// <p>The access policy configured for the Elasticsearch domain. Access policies may be resource-based, IP-based, or IAM-based. See <a href="http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-createupdatedomains.html#es-createdomain-configure-access-policies" target="_blank"> Configuring Access Policies</a>for more information.</p>
52    #[serde(rename = "Options")]
53    pub options: String,
54    /// <p>The status of the access policy for the Elasticsearch domain. See <code>OptionStatus</code> for the status information that's included. </p>
55    #[serde(rename = "Status")]
56    pub status: OptionStatus,
57}
58
59/// <p>Container for the parameters to the <code><a>AddTags</a></code> operation. Specify the tags that you want to attach to the Elasticsearch domain.</p>
60#[derive(Clone, Debug, Default, PartialEq, Serialize)]
61#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
62pub struct AddTagsRequest {
63    /// <p> Specify the <code>ARN</code> for which you want to add the tags.</p>
64    #[serde(rename = "ARN")]
65    pub arn: String,
66    /// <p> List of <code>Tag</code> that need to be added for the Elasticsearch domain. </p>
67    #[serde(rename = "TagList")]
68    pub tag_list: Vec<Tag>,
69}
70
71/// <p> List of limits that are specific to a given InstanceType and for each of it's <code> <a>InstanceRole</a> </code> . </p>
72#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
73#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
74pub struct AdditionalLimit {
75    /// <p> Name of Additional Limit is specific to a given InstanceType and for each of it's <code> <a>InstanceRole</a> </code> etc. <br/> Attributes and their details: <br/> <ul> <li>MaximumNumberOfDataNodesSupported</li> This attribute will be present in Master node only to specify how much data nodes upto which given <code> <a>ESPartitionInstanceType</a> </code> can support as master node. <li>MaximumNumberOfDataNodesWithoutMasterNode</li> This attribute will be present in Data node only to specify how much data nodes of given <code> <a>ESPartitionInstanceType</a> </code> upto which you don't need any master nodes to govern them. </ul> </p>
76    #[serde(rename = "LimitName")]
77    #[serde(skip_serializing_if = "Option::is_none")]
78    pub limit_name: Option<String>,
79    /// <p> Value for given <code> <a>AdditionalLimit$LimitName</a> </code> . </p>
80    #[serde(rename = "LimitValues")]
81    #[serde(skip_serializing_if = "Option::is_none")]
82    pub limit_values: Option<Vec<String>>,
83}
84
85/// <p> Status of the advanced options for the specified Elasticsearch domain. Currently, the following advanced options are available:</p> <ul> <li>Option to allow references to indices in an HTTP request body. Must be <code>false</code> when configuring access to individual sub-resources. By default, the value is <code>true</code>. See <a href="http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-createupdatedomains.html#es-createdomain-configure-advanced-options" target="_blank">Configuration Advanced Options</a> for more information.</li> <li>Option to specify the percentage of heap space that is allocated to field data. By default, this setting is unbounded.</li> </ul> <p>For more information, see <a href="http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-createupdatedomains.html#es-createdomain-configure-advanced-options">Configuring Advanced Options</a>.</p>
86#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
87#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
88pub struct AdvancedOptionsStatus {
89    /// <p> Specifies the status of advanced options for the specified Elasticsearch domain.</p>
90    #[serde(rename = "Options")]
91    pub options: ::std::collections::HashMap<String, String>,
92    /// <p> Specifies the status of <code>OptionStatus</code> for advanced options for the specified Elasticsearch domain.</p>
93    #[serde(rename = "Status")]
94    pub status: OptionStatus,
95}
96
97/// <p>Specifies the advanced security configuration: whether advanced security is enabled, whether the internal database option is enabled.</p>
98#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
99#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
100pub struct AdvancedSecurityOptions {
101    /// <p>True if advanced security is enabled.</p>
102    #[serde(rename = "Enabled")]
103    #[serde(skip_serializing_if = "Option::is_none")]
104    pub enabled: Option<bool>,
105    /// <p>True if the internal user database is enabled.</p>
106    #[serde(rename = "InternalUserDatabaseEnabled")]
107    #[serde(skip_serializing_if = "Option::is_none")]
108    pub internal_user_database_enabled: Option<bool>,
109}
110
111/// <p>Specifies the advanced security configuration: whether advanced security is enabled, whether the internal database option is enabled, master username and password (if internal database is enabled), and master user ARN (if IAM is enabled).</p>
112#[derive(Clone, Debug, Default, PartialEq, Serialize)]
113#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
114pub struct AdvancedSecurityOptionsInput {
115    /// <p>True if advanced security is enabled.</p>
116    #[serde(rename = "Enabled")]
117    #[serde(skip_serializing_if = "Option::is_none")]
118    pub enabled: Option<bool>,
119    /// <p>True if the internal user database is enabled.</p>
120    #[serde(rename = "InternalUserDatabaseEnabled")]
121    #[serde(skip_serializing_if = "Option::is_none")]
122    pub internal_user_database_enabled: Option<bool>,
123    /// <p>Credentials for the master user: username and password, ARN, or both.</p>
124    #[serde(rename = "MasterUserOptions")]
125    #[serde(skip_serializing_if = "Option::is_none")]
126    pub master_user_options: Option<MasterUserOptions>,
127}
128
129/// <p> Specifies the status of advanced security options for the specified Elasticsearch domain.</p>
130#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
131#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
132pub struct AdvancedSecurityOptionsStatus {
133    /// <p> Specifies advanced security options for the specified Elasticsearch domain.</p>
134    #[serde(rename = "Options")]
135    pub options: AdvancedSecurityOptions,
136    /// <p> Status of the advanced security options for the specified Elasticsearch domain.</p>
137    #[serde(rename = "Status")]
138    pub status: OptionStatus,
139}
140
141/// <p> Container for request parameters to <code> <a>AssociatePackage</a> </code> operation. </p>
142#[derive(Clone, Debug, Default, PartialEq, Serialize)]
143#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
144pub struct AssociatePackageRequest {
145    /// <p>Name of the domain that you want to associate the package with.</p>
146    #[serde(rename = "DomainName")]
147    pub domain_name: String,
148    /// <p>Internal ID of the package that you want to associate with a domain. Use <code>DescribePackages</code> to find this value.</p>
149    #[serde(rename = "PackageID")]
150    pub package_id: String,
151}
152
153/// <p> Container for response returned by <code> <a>AssociatePackage</a> </code> operation. </p>
154#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
155#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
156pub struct AssociatePackageResponse {
157    /// <p><code>DomainPackageDetails</code></p>
158    #[serde(rename = "DomainPackageDetails")]
159    #[serde(skip_serializing_if = "Option::is_none")]
160    pub domain_package_details: Option<DomainPackageDetails>,
161}
162
163/// <p>Container for the parameters to the <code><a>CancelElasticsearchServiceSoftwareUpdate</a></code> operation. Specifies the name of the Elasticsearch domain that you wish to cancel a service software update on.</p>
164#[derive(Clone, Debug, Default, PartialEq, Serialize)]
165#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
166pub struct CancelElasticsearchServiceSoftwareUpdateRequest {
167    /// <p>The name of the domain that you want to stop the latest service software update on.</p>
168    #[serde(rename = "DomainName")]
169    pub domain_name: String,
170}
171
172/// <p>The result of a <code>CancelElasticsearchServiceSoftwareUpdate</code> operation. Contains the status of the update.</p>
173#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
174#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
175pub struct CancelElasticsearchServiceSoftwareUpdateResponse {
176    /// <p>The current status of the Elasticsearch service software update.</p>
177    #[serde(rename = "ServiceSoftwareOptions")]
178    #[serde(skip_serializing_if = "Option::is_none")]
179    pub service_software_options: Option<ServiceSoftwareOptions>,
180}
181
182/// <p>Options to specify the Cognito user and identity pools for Kibana authentication. For more information, see <a href="http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-cognito-auth.html" target="_blank">Amazon Cognito Authentication for Kibana</a>.</p>
183#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
184pub struct CognitoOptions {
185    /// <p>Specifies the option to enable Cognito for Kibana authentication.</p>
186    #[serde(rename = "Enabled")]
187    #[serde(skip_serializing_if = "Option::is_none")]
188    pub enabled: Option<bool>,
189    /// <p>Specifies the Cognito identity pool ID for Kibana authentication.</p>
190    #[serde(rename = "IdentityPoolId")]
191    #[serde(skip_serializing_if = "Option::is_none")]
192    pub identity_pool_id: Option<String>,
193    /// <p>Specifies the role ARN that provides Elasticsearch permissions for accessing Cognito resources.</p>
194    #[serde(rename = "RoleArn")]
195    #[serde(skip_serializing_if = "Option::is_none")]
196    pub role_arn: Option<String>,
197    /// <p>Specifies the Cognito user pool ID for Kibana authentication.</p>
198    #[serde(rename = "UserPoolId")]
199    #[serde(skip_serializing_if = "Option::is_none")]
200    pub user_pool_id: Option<String>,
201}
202
203/// <p>Status of the Cognito options for the specified Elasticsearch domain.</p>
204#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
205#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
206pub struct CognitoOptionsStatus {
207    /// <p>Specifies the Cognito options for the specified Elasticsearch domain.</p>
208    #[serde(rename = "Options")]
209    pub options: CognitoOptions,
210    /// <p>Specifies the status of the Cognito options for the specified Elasticsearch domain.</p>
211    #[serde(rename = "Status")]
212    pub status: OptionStatus,
213}
214
215/// <p> A map from an <code> <a>ElasticsearchVersion</a> </code> to a list of compatible <code> <a>ElasticsearchVersion</a> </code> s to which the domain can be upgraded. </p>
216#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
217#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
218pub struct CompatibleVersionsMap {
219    /// <p>The current version of Elasticsearch on which a domain is.</p>
220    #[serde(rename = "SourceVersion")]
221    #[serde(skip_serializing_if = "Option::is_none")]
222    pub source_version: Option<String>,
223    #[serde(rename = "TargetVersions")]
224    #[serde(skip_serializing_if = "Option::is_none")]
225    pub target_versions: Option<Vec<String>>,
226}
227
228#[derive(Clone, Debug, Default, PartialEq, Serialize)]
229#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
230pub struct CreateElasticsearchDomainRequest {
231    /// <p> IAM access policy as a JSON-formatted string.</p>
232    #[serde(rename = "AccessPolicies")]
233    #[serde(skip_serializing_if = "Option::is_none")]
234    pub access_policies: Option<String>,
235    /// <p> Option to allow references to indices in an HTTP request body. Must be <code>false</code> when configuring access to individual sub-resources. By default, the value is <code>true</code>. See <a href="http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-createupdatedomains.html#es-createdomain-configure-advanced-options" target="_blank">Configuration Advanced Options</a> for more information.</p>
236    #[serde(rename = "AdvancedOptions")]
237    #[serde(skip_serializing_if = "Option::is_none")]
238    pub advanced_options: Option<::std::collections::HashMap<String, String>>,
239    /// <p>Specifies advanced security options.</p>
240    #[serde(rename = "AdvancedSecurityOptions")]
241    #[serde(skip_serializing_if = "Option::is_none")]
242    pub advanced_security_options: Option<AdvancedSecurityOptionsInput>,
243    /// <p>Options to specify the Cognito user and identity pools for Kibana authentication. For more information, see <a href="http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-cognito-auth.html" target="_blank">Amazon Cognito Authentication for Kibana</a>.</p>
244    #[serde(rename = "CognitoOptions")]
245    #[serde(skip_serializing_if = "Option::is_none")]
246    pub cognito_options: Option<CognitoOptions>,
247    /// <p>Options to specify configuration that will be applied to the domain endpoint.</p>
248    #[serde(rename = "DomainEndpointOptions")]
249    #[serde(skip_serializing_if = "Option::is_none")]
250    pub domain_endpoint_options: Option<DomainEndpointOptions>,
251    /// <p>The name of the Elasticsearch domain that you are creating. Domain names are unique across the domains owned by an account within an AWS region. Domain names must start with a lowercase letter and can contain the following characters: a-z (lowercase), 0-9, and - (hyphen).</p>
252    #[serde(rename = "DomainName")]
253    pub domain_name: String,
254    /// <p>Options to enable, disable and specify the type and size of EBS storage volumes. </p>
255    #[serde(rename = "EBSOptions")]
256    #[serde(skip_serializing_if = "Option::is_none")]
257    pub ebs_options: Option<EBSOptions>,
258    /// <p>Configuration options for an Elasticsearch domain. Specifies the instance type and number of instances in the domain cluster. </p>
259    #[serde(rename = "ElasticsearchClusterConfig")]
260    #[serde(skip_serializing_if = "Option::is_none")]
261    pub elasticsearch_cluster_config: Option<ElasticsearchClusterConfig>,
262    /// <p>String of format X.Y to specify version for the Elasticsearch domain eg. "1.5" or "2.3". For more information, see <a href="http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-createupdatedomains.html#es-createdomains" target="_blank">Creating Elasticsearch Domains</a> in the <i>Amazon Elasticsearch Service Developer Guide</i>.</p>
263    #[serde(rename = "ElasticsearchVersion")]
264    #[serde(skip_serializing_if = "Option::is_none")]
265    pub elasticsearch_version: Option<String>,
266    /// <p>Specifies the Encryption At Rest Options.</p>
267    #[serde(rename = "EncryptionAtRestOptions")]
268    #[serde(skip_serializing_if = "Option::is_none")]
269    pub encryption_at_rest_options: Option<EncryptionAtRestOptions>,
270    /// <p>Map of <code>LogType</code> and <code>LogPublishingOption</code>, each containing options to publish a given type of Elasticsearch log.</p>
271    #[serde(rename = "LogPublishingOptions")]
272    #[serde(skip_serializing_if = "Option::is_none")]
273    pub log_publishing_options: Option<::std::collections::HashMap<String, LogPublishingOption>>,
274    /// <p>Specifies the NodeToNodeEncryptionOptions.</p>
275    #[serde(rename = "NodeToNodeEncryptionOptions")]
276    #[serde(skip_serializing_if = "Option::is_none")]
277    pub node_to_node_encryption_options: Option<NodeToNodeEncryptionOptions>,
278    /// <p>Option to set time, in UTC format, of the daily automated snapshot. Default value is 0 hours. </p>
279    #[serde(rename = "SnapshotOptions")]
280    #[serde(skip_serializing_if = "Option::is_none")]
281    pub snapshot_options: Option<SnapshotOptions>,
282    /// <p>Options to specify the subnets and security groups for VPC endpoint. For more information, see <a href="http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-vpc.html#es-creating-vpc" target="_blank">Creating a VPC</a> in <i>VPC Endpoints for Amazon Elasticsearch Service Domains</i></p>
283    #[serde(rename = "VPCOptions")]
284    #[serde(skip_serializing_if = "Option::is_none")]
285    pub vpc_options: Option<VPCOptions>,
286}
287
288/// <p>The result of a <code>CreateElasticsearchDomain</code> operation. Contains the status of the newly created Elasticsearch domain.</p>
289#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
290#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
291pub struct CreateElasticsearchDomainResponse {
292    /// <p>The status of the newly created Elasticsearch domain. </p>
293    #[serde(rename = "DomainStatus")]
294    #[serde(skip_serializing_if = "Option::is_none")]
295    pub domain_status: Option<ElasticsearchDomainStatus>,
296}
297
298/// <p>Container for the parameters to the <code><a>CreateOutboundCrossClusterSearchConnection</a></code> operation.</p>
299#[derive(Clone, Debug, Default, PartialEq, Serialize)]
300#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
301pub struct CreateOutboundCrossClusterSearchConnectionRequest {
302    /// <p>Specifies the connection alias that will be used by the customer for this connection.</p>
303    #[serde(rename = "ConnectionAlias")]
304    pub connection_alias: String,
305    /// <p>Specifies the <code><a>DomainInformation</a></code> for the destination Elasticsearch domain.</p>
306    #[serde(rename = "DestinationDomainInfo")]
307    pub destination_domain_info: DomainInformation,
308    /// <p>Specifies the <code><a>DomainInformation</a></code> for the source Elasticsearch domain.</p>
309    #[serde(rename = "SourceDomainInfo")]
310    pub source_domain_info: DomainInformation,
311}
312
313/// <p>The result of a <code><a>CreateOutboundCrossClusterSearchConnection</a></code> request. Contains the details of the newly created cross-cluster search connection.</p>
314#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
315#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
316pub struct CreateOutboundCrossClusterSearchConnectionResponse {
317    /// <p>Specifies the connection alias provided during the create connection request.</p>
318    #[serde(rename = "ConnectionAlias")]
319    #[serde(skip_serializing_if = "Option::is_none")]
320    pub connection_alias: Option<String>,
321    /// <p>Specifies the <code><a>OutboundCrossClusterSearchConnectionStatus</a></code> for the newly created connection.</p>
322    #[serde(rename = "ConnectionStatus")]
323    #[serde(skip_serializing_if = "Option::is_none")]
324    pub connection_status: Option<OutboundCrossClusterSearchConnectionStatus>,
325    /// <p>Unique id for the created outbound connection, which is used for subsequent operations on connection.</p>
326    #[serde(rename = "CrossClusterSearchConnectionId")]
327    #[serde(skip_serializing_if = "Option::is_none")]
328    pub cross_cluster_search_connection_id: Option<String>,
329    /// <p>Specifies the <code><a>DomainInformation</a></code> for the destination Elasticsearch domain.</p>
330    #[serde(rename = "DestinationDomainInfo")]
331    #[serde(skip_serializing_if = "Option::is_none")]
332    pub destination_domain_info: Option<DomainInformation>,
333    /// <p>Specifies the <code><a>DomainInformation</a></code> for the source Elasticsearch domain.</p>
334    #[serde(rename = "SourceDomainInfo")]
335    #[serde(skip_serializing_if = "Option::is_none")]
336    pub source_domain_info: Option<DomainInformation>,
337}
338
339/// <p> Container for request parameters to <code> <a>CreatePackage</a> </code> operation. </p>
340#[derive(Clone, Debug, Default, PartialEq, Serialize)]
341#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
342pub struct CreatePackageRequest {
343    /// <p>Description of the package.</p>
344    #[serde(rename = "PackageDescription")]
345    #[serde(skip_serializing_if = "Option::is_none")]
346    pub package_description: Option<String>,
347    /// <p>Unique identifier for the package.</p>
348    #[serde(rename = "PackageName")]
349    pub package_name: String,
350    /// <p>The customer S3 location <code>PackageSource</code> for importing the package.</p>
351    #[serde(rename = "PackageSource")]
352    pub package_source: PackageSource,
353    /// <p>Type of package. Currently supports only TXT-DICTIONARY.</p>
354    #[serde(rename = "PackageType")]
355    pub package_type: String,
356}
357
358/// <p> Container for response returned by <code> <a>CreatePackage</a> </code> operation. </p>
359#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
360#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
361pub struct CreatePackageResponse {
362    /// <p>Information about the package <code>PackageDetails</code>.</p>
363    #[serde(rename = "PackageDetails")]
364    #[serde(skip_serializing_if = "Option::is_none")]
365    pub package_details: Option<PackageDetails>,
366}
367
368/// <p>Container for the parameters to the <code><a>DeleteElasticsearchDomain</a></code> operation. Specifies the name of the Elasticsearch domain that you want to delete.</p>
369#[derive(Clone, Debug, Default, PartialEq, Serialize)]
370#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
371pub struct DeleteElasticsearchDomainRequest {
372    /// <p>The name of the Elasticsearch domain that you want to permanently delete.</p>
373    #[serde(rename = "DomainName")]
374    pub domain_name: String,
375}
376
377/// <p>The result of a <code>DeleteElasticsearchDomain</code> request. Contains the status of the pending deletion, or no status if the domain and all of its resources have been deleted.</p>
378#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
379#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
380pub struct DeleteElasticsearchDomainResponse {
381    /// <p>The status of the Elasticsearch domain being deleted.</p>
382    #[serde(rename = "DomainStatus")]
383    #[serde(skip_serializing_if = "Option::is_none")]
384    pub domain_status: Option<ElasticsearchDomainStatus>,
385}
386
387/// <p>Container for the parameters to the <code><a>DeleteInboundCrossClusterSearchConnection</a></code> operation.</p>
388#[derive(Clone, Debug, Default, PartialEq, Serialize)]
389#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
390pub struct DeleteInboundCrossClusterSearchConnectionRequest {
391    /// <p>The id of the inbound connection that you want to permanently delete.</p>
392    #[serde(rename = "CrossClusterSearchConnectionId")]
393    pub cross_cluster_search_connection_id: String,
394}
395
396/// <p>The result of a <code><a>DeleteInboundCrossClusterSearchConnection</a></code> operation. Contains details of deleted inbound connection.</p>
397#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
398#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
399pub struct DeleteInboundCrossClusterSearchConnectionResponse {
400    /// <p>Specifies the <code><a>InboundCrossClusterSearchConnection</a></code> of deleted inbound connection. </p>
401    #[serde(rename = "CrossClusterSearchConnection")]
402    #[serde(skip_serializing_if = "Option::is_none")]
403    pub cross_cluster_search_connection: Option<InboundCrossClusterSearchConnection>,
404}
405
406/// <p>Container for the parameters to the <code><a>DeleteOutboundCrossClusterSearchConnection</a></code> operation.</p>
407#[derive(Clone, Debug, Default, PartialEq, Serialize)]
408#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
409pub struct DeleteOutboundCrossClusterSearchConnectionRequest {
410    /// <p>The id of the outbound connection that you want to permanently delete.</p>
411    #[serde(rename = "CrossClusterSearchConnectionId")]
412    pub cross_cluster_search_connection_id: String,
413}
414
415/// <p>The result of a <code><a>DeleteOutboundCrossClusterSearchConnection</a></code> operation. Contains details of deleted outbound connection.</p>
416#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
417#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
418pub struct DeleteOutboundCrossClusterSearchConnectionResponse {
419    /// <p>Specifies the <code><a>OutboundCrossClusterSearchConnection</a></code> of deleted outbound connection. </p>
420    #[serde(rename = "CrossClusterSearchConnection")]
421    #[serde(skip_serializing_if = "Option::is_none")]
422    pub cross_cluster_search_connection: Option<OutboundCrossClusterSearchConnection>,
423}
424
425/// <p> Container for request parameters to <code> <a>DeletePackage</a> </code> operation. </p>
426#[derive(Clone, Debug, Default, PartialEq, Serialize)]
427#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
428pub struct DeletePackageRequest {
429    /// <p>Internal ID of the package that you want to delete. Use <code>DescribePackages</code> to find this value.</p>
430    #[serde(rename = "PackageID")]
431    pub package_id: String,
432}
433
434/// <p> Container for response parameters to <code> <a>DeletePackage</a> </code> operation. </p>
435#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
436#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
437pub struct DeletePackageResponse {
438    /// <p><code>PackageDetails</code></p>
439    #[serde(rename = "PackageDetails")]
440    #[serde(skip_serializing_if = "Option::is_none")]
441    pub package_details: Option<PackageDetails>,
442}
443
444/// <p> Container for the parameters to the <code>DescribeElasticsearchDomainConfig</code> operation. Specifies the domain name for which you want configuration information.</p>
445#[derive(Clone, Debug, Default, PartialEq, Serialize)]
446#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
447pub struct DescribeElasticsearchDomainConfigRequest {
448    /// <p>The Elasticsearch domain that you want to get information about.</p>
449    #[serde(rename = "DomainName")]
450    pub domain_name: String,
451}
452
453/// <p>The result of a <code>DescribeElasticsearchDomainConfig</code> request. Contains the configuration information of the requested domain.</p>
454#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
455#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
456pub struct DescribeElasticsearchDomainConfigResponse {
457    /// <p>The configuration information of the domain requested in the <code>DescribeElasticsearchDomainConfig</code> request.</p>
458    #[serde(rename = "DomainConfig")]
459    pub domain_config: ElasticsearchDomainConfig,
460}
461
462/// <p>Container for the parameters to the <code><a>DescribeElasticsearchDomain</a></code> operation.</p>
463#[derive(Clone, Debug, Default, PartialEq, Serialize)]
464#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
465pub struct DescribeElasticsearchDomainRequest {
466    /// <p>The name of the Elasticsearch domain for which you want information.</p>
467    #[serde(rename = "DomainName")]
468    pub domain_name: String,
469}
470
471/// <p>The result of a <code>DescribeElasticsearchDomain</code> request. Contains the status of the domain specified in the request.</p>
472#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
473#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
474pub struct DescribeElasticsearchDomainResponse {
475    /// <p>The current status of the Elasticsearch domain.</p>
476    #[serde(rename = "DomainStatus")]
477    pub domain_status: ElasticsearchDomainStatus,
478}
479
480/// <p>Container for the parameters to the <code><a>DescribeElasticsearchDomains</a></code> operation. By default, the API returns the status of all Elasticsearch domains.</p>
481#[derive(Clone, Debug, Default, PartialEq, Serialize)]
482#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
483pub struct DescribeElasticsearchDomainsRequest {
484    /// <p>The Elasticsearch domains for which you want information.</p>
485    #[serde(rename = "DomainNames")]
486    pub domain_names: Vec<String>,
487}
488
489/// <p>The result of a <code>DescribeElasticsearchDomains</code> request. Contains the status of the specified domains or all domains owned by the account.</p>
490#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
491#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
492pub struct DescribeElasticsearchDomainsResponse {
493    /// <p>The status of the domains requested in the <code>DescribeElasticsearchDomains</code> request.</p>
494    #[serde(rename = "DomainStatusList")]
495    pub domain_status_list: Vec<ElasticsearchDomainStatus>,
496}
497
498/// <p> Container for the parameters to <code> <a>DescribeElasticsearchInstanceTypeLimits</a> </code> operation. </p>
499#[derive(Clone, Debug, Default, PartialEq, Serialize)]
500#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
501pub struct DescribeElasticsearchInstanceTypeLimitsRequest {
502    /// <p> DomainName represents the name of the Domain that we are trying to modify. This should be present only if we are querying for Elasticsearch <code> <a>Limits</a> </code> for existing domain. </p>
503    #[serde(rename = "DomainName")]
504    #[serde(skip_serializing_if = "Option::is_none")]
505    pub domain_name: Option<String>,
506    /// <p> Version of Elasticsearch for which <code> <a>Limits</a> </code> are needed. </p>
507    #[serde(rename = "ElasticsearchVersion")]
508    pub elasticsearch_version: String,
509    /// <p> The instance type for an Elasticsearch cluster for which Elasticsearch <code> <a>Limits</a> </code> are needed. </p>
510    #[serde(rename = "InstanceType")]
511    pub instance_type: String,
512}
513
514/// <p> Container for the parameters received from <code> <a>DescribeElasticsearchInstanceTypeLimits</a> </code> operation. </p>
515#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
516#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
517pub struct DescribeElasticsearchInstanceTypeLimitsResponse {
518    #[serde(rename = "LimitsByRole")]
519    #[serde(skip_serializing_if = "Option::is_none")]
520    pub limits_by_role: Option<::std::collections::HashMap<String, Limits>>,
521}
522
523/// <p>Container for the parameters to the <code><a>DescribeInboundCrossClusterSearchConnections</a></code> operation.</p>
524#[derive(Clone, Debug, Default, PartialEq, Serialize)]
525#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
526pub struct DescribeInboundCrossClusterSearchConnectionsRequest {
527    /// <p> A list of filters used to match properties for inbound cross-cluster search connection. Available <code><a>Filter</a></code> names for this operation are: <ul> <li>cross-cluster-search-connection-id</li> <li>source-domain-info.domain-name</li> <li>source-domain-info.owner-id</li> <li>source-domain-info.region</li> <li>destination-domain-info.domain-name</li> </ul> </p>
528    #[serde(rename = "Filters")]
529    #[serde(skip_serializing_if = "Option::is_none")]
530    pub filters: Option<Vec<Filter>>,
531    /// <p>Set this value to limit the number of results returned. If not specified, defaults to 100.</p>
532    #[serde(rename = "MaxResults")]
533    #[serde(skip_serializing_if = "Option::is_none")]
534    pub max_results: Option<i64>,
535    /// <p> NextToken is sent in case the earlier API call results contain the NextToken. It is used for pagination.</p>
536    #[serde(rename = "NextToken")]
537    #[serde(skip_serializing_if = "Option::is_none")]
538    pub next_token: Option<String>,
539}
540
541/// <p>The result of a <code><a>DescribeInboundCrossClusterSearchConnections</a></code> request. Contains the list of connections matching the filter criteria.</p>
542#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
543#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
544pub struct DescribeInboundCrossClusterSearchConnectionsResponse {
545    /// <p>Consists of list of <code><a>InboundCrossClusterSearchConnection</a></code> matching the specified filter criteria.</p>
546    #[serde(rename = "CrossClusterSearchConnections")]
547    #[serde(skip_serializing_if = "Option::is_none")]
548    pub cross_cluster_search_connections: Option<Vec<InboundCrossClusterSearchConnection>>,
549    /// <p>If more results are available and NextToken is present, make the next request to the same API with the received NextToken to paginate the remaining results. </p>
550    #[serde(rename = "NextToken")]
551    #[serde(skip_serializing_if = "Option::is_none")]
552    pub next_token: Option<String>,
553}
554
555/// <p>Container for the parameters to the <code><a>DescribeOutboundCrossClusterSearchConnections</a></code> operation.</p>
556#[derive(Clone, Debug, Default, PartialEq, Serialize)]
557#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
558pub struct DescribeOutboundCrossClusterSearchConnectionsRequest {
559    /// <p> A list of filters used to match properties for outbound cross-cluster search connection. Available <code><a>Filter</a></code> names for this operation are: <ul> <li>cross-cluster-search-connection-id</li> <li>destination-domain-info.domain-name</li> <li>destination-domain-info.owner-id</li> <li>destination-domain-info.region</li> <li>source-domain-info.domain-name</li> </ul> </p>
560    #[serde(rename = "Filters")]
561    #[serde(skip_serializing_if = "Option::is_none")]
562    pub filters: Option<Vec<Filter>>,
563    /// <p>Set this value to limit the number of results returned. If not specified, defaults to 100.</p>
564    #[serde(rename = "MaxResults")]
565    #[serde(skip_serializing_if = "Option::is_none")]
566    pub max_results: Option<i64>,
567    /// <p> NextToken is sent in case the earlier API call results contain the NextToken. It is used for pagination.</p>
568    #[serde(rename = "NextToken")]
569    #[serde(skip_serializing_if = "Option::is_none")]
570    pub next_token: Option<String>,
571}
572
573/// <p>The result of a <code><a>DescribeOutboundCrossClusterSearchConnections</a></code> request. Contains the list of connections matching the filter criteria.</p>
574#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
575#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
576pub struct DescribeOutboundCrossClusterSearchConnectionsResponse {
577    /// <p>Consists of list of <code><a>OutboundCrossClusterSearchConnection</a></code> matching the specified filter criteria.</p>
578    #[serde(rename = "CrossClusterSearchConnections")]
579    #[serde(skip_serializing_if = "Option::is_none")]
580    pub cross_cluster_search_connections: Option<Vec<OutboundCrossClusterSearchConnection>>,
581    /// <p>If more results are available and NextToken is present, make the next request to the same API with the received NextToken to paginate the remaining results. </p>
582    #[serde(rename = "NextToken")]
583    #[serde(skip_serializing_if = "Option::is_none")]
584    pub next_token: Option<String>,
585}
586
587/// <p>Filter to apply in <code>DescribePackage</code> response.</p>
588#[derive(Clone, Debug, Default, PartialEq, Serialize)]
589#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
590pub struct DescribePackagesFilter {
591    /// <p>Any field from <code>PackageDetails</code>.</p>
592    #[serde(rename = "Name")]
593    #[serde(skip_serializing_if = "Option::is_none")]
594    pub name: Option<String>,
595    /// <p>A list of values for the specified field.</p>
596    #[serde(rename = "Value")]
597    #[serde(skip_serializing_if = "Option::is_none")]
598    pub value: Option<Vec<String>>,
599}
600
601/// <p> Container for request parameters to <code> <a>DescribePackage</a> </code> operation. </p>
602#[derive(Clone, Debug, Default, PartialEq, Serialize)]
603#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
604pub struct DescribePackagesRequest {
605    /// <p>Only returns packages that match the <code>DescribePackagesFilterList</code> values.</p>
606    #[serde(rename = "Filters")]
607    #[serde(skip_serializing_if = "Option::is_none")]
608    pub filters: Option<Vec<DescribePackagesFilter>>,
609    /// <p>Limits results to a maximum number of packages.</p>
610    #[serde(rename = "MaxResults")]
611    #[serde(skip_serializing_if = "Option::is_none")]
612    pub max_results: Option<i64>,
613    /// <p>Used for pagination. Only necessary if a previous API call includes a non-null NextToken value. If provided, returns results for the next page.</p>
614    #[serde(rename = "NextToken")]
615    #[serde(skip_serializing_if = "Option::is_none")]
616    pub next_token: Option<String>,
617}
618
619/// <p> Container for response returned by <code> <a>DescribePackages</a> </code> operation. </p>
620#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
621#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
622pub struct DescribePackagesResponse {
623    #[serde(rename = "NextToken")]
624    #[serde(skip_serializing_if = "Option::is_none")]
625    pub next_token: Option<String>,
626    /// <p>List of <code>PackageDetails</code> objects.</p>
627    #[serde(rename = "PackageDetailsList")]
628    #[serde(skip_serializing_if = "Option::is_none")]
629    pub package_details_list: Option<Vec<PackageDetails>>,
630}
631
632/// <p>Container for parameters to <code>DescribeReservedElasticsearchInstanceOfferings</code></p>
633#[derive(Clone, Debug, Default, PartialEq, Serialize)]
634#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
635pub struct DescribeReservedElasticsearchInstanceOfferingsRequest {
636    /// <p>Set this value to limit the number of results returned. If not specified, defaults to 100.</p>
637    #[serde(rename = "MaxResults")]
638    #[serde(skip_serializing_if = "Option::is_none")]
639    pub max_results: Option<i64>,
640    /// <p>NextToken should be sent in case if earlier API call produced result containing NextToken. It is used for pagination.</p>
641    #[serde(rename = "NextToken")]
642    #[serde(skip_serializing_if = "Option::is_none")]
643    pub next_token: Option<String>,
644    /// <p>The offering identifier filter value. Use this parameter to show only the available offering that matches the specified reservation identifier.</p>
645    #[serde(rename = "ReservedElasticsearchInstanceOfferingId")]
646    #[serde(skip_serializing_if = "Option::is_none")]
647    pub reserved_elasticsearch_instance_offering_id: Option<String>,
648}
649
650/// <p>Container for results from <code>DescribeReservedElasticsearchInstanceOfferings</code></p>
651#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
652#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
653pub struct DescribeReservedElasticsearchInstanceOfferingsResponse {
654    /// <p>Provides an identifier to allow retrieval of paginated results.</p>
655    #[serde(rename = "NextToken")]
656    #[serde(skip_serializing_if = "Option::is_none")]
657    pub next_token: Option<String>,
658    /// <p>List of reserved Elasticsearch instance offerings</p>
659    #[serde(rename = "ReservedElasticsearchInstanceOfferings")]
660    #[serde(skip_serializing_if = "Option::is_none")]
661    pub reserved_elasticsearch_instance_offerings:
662        Option<Vec<ReservedElasticsearchInstanceOffering>>,
663}
664
665/// <p>Container for parameters to <code>DescribeReservedElasticsearchInstances</code></p>
666#[derive(Clone, Debug, Default, PartialEq, Serialize)]
667#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
668pub struct DescribeReservedElasticsearchInstancesRequest {
669    /// <p>Set this value to limit the number of results returned. If not specified, defaults to 100.</p>
670    #[serde(rename = "MaxResults")]
671    #[serde(skip_serializing_if = "Option::is_none")]
672    pub max_results: Option<i64>,
673    /// <p>NextToken should be sent in case if earlier API call produced result containing NextToken. It is used for pagination.</p>
674    #[serde(rename = "NextToken")]
675    #[serde(skip_serializing_if = "Option::is_none")]
676    pub next_token: Option<String>,
677    /// <p>The reserved instance identifier filter value. Use this parameter to show only the reservation that matches the specified reserved Elasticsearch instance ID.</p>
678    #[serde(rename = "ReservedElasticsearchInstanceId")]
679    #[serde(skip_serializing_if = "Option::is_none")]
680    pub reserved_elasticsearch_instance_id: Option<String>,
681}
682
683/// <p>Container for results from <code>DescribeReservedElasticsearchInstances</code></p>
684#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
685#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
686pub struct DescribeReservedElasticsearchInstancesResponse {
687    /// <p>Provides an identifier to allow retrieval of paginated results.</p>
688    #[serde(rename = "NextToken")]
689    #[serde(skip_serializing_if = "Option::is_none")]
690    pub next_token: Option<String>,
691    /// <p>List of reserved Elasticsearch instances.</p>
692    #[serde(rename = "ReservedElasticsearchInstances")]
693    #[serde(skip_serializing_if = "Option::is_none")]
694    pub reserved_elasticsearch_instances: Option<Vec<ReservedElasticsearchInstance>>,
695}
696
697/// <p> Container for request parameters to <code> <a>DissociatePackage</a> </code> operation. </p>
698#[derive(Clone, Debug, Default, PartialEq, Serialize)]
699#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
700pub struct DissociatePackageRequest {
701    /// <p>Name of the domain that you want to associate the package with.</p>
702    #[serde(rename = "DomainName")]
703    pub domain_name: String,
704    /// <p>Internal ID of the package that you want to associate with a domain. Use <code>DescribePackages</code> to find this value.</p>
705    #[serde(rename = "PackageID")]
706    pub package_id: String,
707}
708
709/// <p> Container for response returned by <code> <a>DissociatePackage</a> </code> operation. </p>
710#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
711#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
712pub struct DissociatePackageResponse {
713    /// <p><code>DomainPackageDetails</code></p>
714    #[serde(rename = "DomainPackageDetails")]
715    #[serde(skip_serializing_if = "Option::is_none")]
716    pub domain_package_details: Option<DomainPackageDetails>,
717}
718
719/// <p>Options to configure endpoint for the Elasticsearch domain.</p>
720#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
721pub struct DomainEndpointOptions {
722    /// <p>Specify if only HTTPS endpoint should be enabled for the Elasticsearch domain.</p>
723    #[serde(rename = "EnforceHTTPS")]
724    #[serde(skip_serializing_if = "Option::is_none")]
725    pub enforce_https: Option<bool>,
726    /// <p>Specify the TLS security policy that needs to be applied to the HTTPS endpoint of Elasticsearch domain. <br/> It can be one of the following values: <ul> <li><b>Policy-Min-TLS-1-0-2019-07: </b> TLS security policy which supports TLSv1.0 and higher.</li> <li><b>Policy-Min-TLS-1-2-2019-07: </b> TLS security policy which supports only TLSv1.2</li> </ul> </p>
727    #[serde(rename = "TLSSecurityPolicy")]
728    #[serde(skip_serializing_if = "Option::is_none")]
729    pub tls_security_policy: Option<String>,
730}
731
732/// <p>The configured endpoint options for the domain and their current status.</p>
733#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
734#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
735pub struct DomainEndpointOptionsStatus {
736    /// <p>Options to configure endpoint for the Elasticsearch domain.</p>
737    #[serde(rename = "Options")]
738    pub options: DomainEndpointOptions,
739    /// <p>The status of the endpoint options for the Elasticsearch domain. See <code>OptionStatus</code> for the status information that's included. </p>
740    #[serde(rename = "Status")]
741    pub status: OptionStatus,
742}
743
744#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
745#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
746pub struct DomainInfo {
747    /// <p> Specifies the <code>DomainName</code>.</p>
748    #[serde(rename = "DomainName")]
749    #[serde(skip_serializing_if = "Option::is_none")]
750    pub domain_name: Option<String>,
751}
752
753#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
754pub struct DomainInformation {
755    #[serde(rename = "DomainName")]
756    pub domain_name: String,
757    #[serde(rename = "OwnerId")]
758    #[serde(skip_serializing_if = "Option::is_none")]
759    pub owner_id: Option<String>,
760    #[serde(rename = "Region")]
761    #[serde(skip_serializing_if = "Option::is_none")]
762    pub region: Option<String>,
763}
764
765/// <p>Information on a package that is associated with a domain.</p>
766#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
767#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
768pub struct DomainPackageDetails {
769    /// <p>Name of the domain you've associated a package with.</p>
770    #[serde(rename = "DomainName")]
771    #[serde(skip_serializing_if = "Option::is_none")]
772    pub domain_name: Option<String>,
773    /// <p>State of the association. Values are ASSOCIATING/ASSOCIATION_FAILED/ACTIVE/DISSOCIATING/DISSOCIATION_FAILED.</p>
774    #[serde(rename = "DomainPackageStatus")]
775    #[serde(skip_serializing_if = "Option::is_none")]
776    pub domain_package_status: Option<String>,
777    /// <p>Additional information if the package is in an error state. Null otherwise.</p>
778    #[serde(rename = "ErrorDetails")]
779    #[serde(skip_serializing_if = "Option::is_none")]
780    pub error_details: Option<ErrorDetails>,
781    /// <p>Timestamp of the most-recent update to the association status.</p>
782    #[serde(rename = "LastUpdated")]
783    #[serde(skip_serializing_if = "Option::is_none")]
784    pub last_updated: Option<f64>,
785    /// <p>Internal ID of the package.</p>
786    #[serde(rename = "PackageID")]
787    #[serde(skip_serializing_if = "Option::is_none")]
788    pub package_id: Option<String>,
789    /// <p>User specified name of the package.</p>
790    #[serde(rename = "PackageName")]
791    #[serde(skip_serializing_if = "Option::is_none")]
792    pub package_name: Option<String>,
793    /// <p>Currently supports only TXT-DICTIONARY.</p>
794    #[serde(rename = "PackageType")]
795    #[serde(skip_serializing_if = "Option::is_none")]
796    pub package_type: Option<String>,
797    /// <p>The relative path on Amazon ES nodes, which can be used as synonym_path when the package is synonym file.</p>
798    #[serde(rename = "ReferencePath")]
799    #[serde(skip_serializing_if = "Option::is_none")]
800    pub reference_path: Option<String>,
801}
802
803/// <p>Options to enable, disable, and specify the properties of EBS storage volumes. For more information, see <a href="http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-createupdatedomains.html#es-createdomain-configure-ebs" target="_blank"> Configuring EBS-based Storage</a>.</p>
804#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
805pub struct EBSOptions {
806    /// <p>Specifies whether EBS-based storage is enabled.</p>
807    #[serde(rename = "EBSEnabled")]
808    #[serde(skip_serializing_if = "Option::is_none")]
809    pub ebs_enabled: Option<bool>,
810    /// <p>Specifies the IOPD for a Provisioned IOPS EBS volume (SSD).</p>
811    #[serde(rename = "Iops")]
812    #[serde(skip_serializing_if = "Option::is_none")]
813    pub iops: Option<i64>,
814    /// <p> Integer to specify the size of an EBS volume.</p>
815    #[serde(rename = "VolumeSize")]
816    #[serde(skip_serializing_if = "Option::is_none")]
817    pub volume_size: Option<i64>,
818    /// <p> Specifies the volume type for EBS-based storage.</p>
819    #[serde(rename = "VolumeType")]
820    #[serde(skip_serializing_if = "Option::is_none")]
821    pub volume_type: Option<String>,
822}
823
824/// <p> Status of the EBS options for the specified Elasticsearch domain.</p>
825#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
826#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
827pub struct EBSOptionsStatus {
828    /// <p> Specifies the EBS options for the specified Elasticsearch domain.</p>
829    #[serde(rename = "Options")]
830    pub options: EBSOptions,
831    /// <p> Specifies the status of the EBS options for the specified Elasticsearch domain.</p>
832    #[serde(rename = "Status")]
833    pub status: OptionStatus,
834}
835
836/// <p>Specifies the configuration for the domain cluster, such as the type and number of instances.</p>
837#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
838pub struct ElasticsearchClusterConfig {
839    /// <p>Total number of dedicated master nodes, active and on standby, for the cluster.</p>
840    #[serde(rename = "DedicatedMasterCount")]
841    #[serde(skip_serializing_if = "Option::is_none")]
842    pub dedicated_master_count: Option<i64>,
843    /// <p>A boolean value to indicate whether a dedicated master node is enabled. See <a href="http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-managedomains.html#es-managedomains-dedicatedmasternodes" target="_blank">About Dedicated Master Nodes</a> for more information.</p>
844    #[serde(rename = "DedicatedMasterEnabled")]
845    #[serde(skip_serializing_if = "Option::is_none")]
846    pub dedicated_master_enabled: Option<bool>,
847    /// <p>The instance type for a dedicated master node.</p>
848    #[serde(rename = "DedicatedMasterType")]
849    #[serde(skip_serializing_if = "Option::is_none")]
850    pub dedicated_master_type: Option<String>,
851    /// <p>The number of instances in the specified domain cluster.</p>
852    #[serde(rename = "InstanceCount")]
853    #[serde(skip_serializing_if = "Option::is_none")]
854    pub instance_count: Option<i64>,
855    /// <p>The instance type for an Elasticsearch cluster. UltraWarm instance types are not supported for data instances.</p>
856    #[serde(rename = "InstanceType")]
857    #[serde(skip_serializing_if = "Option::is_none")]
858    pub instance_type: Option<String>,
859    /// <p>The number of warm nodes in the cluster.</p>
860    #[serde(rename = "WarmCount")]
861    #[serde(skip_serializing_if = "Option::is_none")]
862    pub warm_count: Option<i64>,
863    /// <p>True to enable warm storage.</p>
864    #[serde(rename = "WarmEnabled")]
865    #[serde(skip_serializing_if = "Option::is_none")]
866    pub warm_enabled: Option<bool>,
867    /// <p>The instance type for the Elasticsearch cluster's warm nodes.</p>
868    #[serde(rename = "WarmType")]
869    #[serde(skip_serializing_if = "Option::is_none")]
870    pub warm_type: Option<String>,
871    /// <p>Specifies the zone awareness configuration for a domain when zone awareness is enabled.</p>
872    #[serde(rename = "ZoneAwarenessConfig")]
873    #[serde(skip_serializing_if = "Option::is_none")]
874    pub zone_awareness_config: Option<ZoneAwarenessConfig>,
875    /// <p>A boolean value to indicate whether zone awareness is enabled. See <a href="http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-managedomains.html#es-managedomains-zoneawareness" target="_blank">About Zone Awareness</a> for more information.</p>
876    #[serde(rename = "ZoneAwarenessEnabled")]
877    #[serde(skip_serializing_if = "Option::is_none")]
878    pub zone_awareness_enabled: Option<bool>,
879}
880
881/// <p> Specifies the configuration status for the specified Elasticsearch domain.</p>
882#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
883#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
884pub struct ElasticsearchClusterConfigStatus {
885    /// <p> Specifies the cluster configuration for the specified Elasticsearch domain.</p>
886    #[serde(rename = "Options")]
887    pub options: ElasticsearchClusterConfig,
888    /// <p> Specifies the status of the configuration for the specified Elasticsearch domain.</p>
889    #[serde(rename = "Status")]
890    pub status: OptionStatus,
891}
892
893/// <p>The configuration of an Elasticsearch domain.</p>
894#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
895#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
896pub struct ElasticsearchDomainConfig {
897    /// <p>IAM access policy as a JSON-formatted string.</p>
898    #[serde(rename = "AccessPolicies")]
899    #[serde(skip_serializing_if = "Option::is_none")]
900    pub access_policies: Option<AccessPoliciesStatus>,
901    /// <p>Specifies the <code>AdvancedOptions</code> for the domain. See <a href="http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-createupdatedomains.html#es-createdomain-configure-advanced-options" target="_blank">Configuring Advanced Options</a> for more information.</p>
902    #[serde(rename = "AdvancedOptions")]
903    #[serde(skip_serializing_if = "Option::is_none")]
904    pub advanced_options: Option<AdvancedOptionsStatus>,
905    /// <p>Specifies <code>AdvancedSecurityOptions</code> for the domain. </p>
906    #[serde(rename = "AdvancedSecurityOptions")]
907    #[serde(skip_serializing_if = "Option::is_none")]
908    pub advanced_security_options: Option<AdvancedSecurityOptionsStatus>,
909    /// <p>The <code>CognitoOptions</code> for the specified domain. For more information, see <a href="http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-cognito-auth.html" target="_blank">Amazon Cognito Authentication for Kibana</a>.</p>
910    #[serde(rename = "CognitoOptions")]
911    #[serde(skip_serializing_if = "Option::is_none")]
912    pub cognito_options: Option<CognitoOptionsStatus>,
913    /// <p>Specifies the <code>DomainEndpointOptions</code> for the Elasticsearch domain.</p>
914    #[serde(rename = "DomainEndpointOptions")]
915    #[serde(skip_serializing_if = "Option::is_none")]
916    pub domain_endpoint_options: Option<DomainEndpointOptionsStatus>,
917    /// <p>Specifies the <code>EBSOptions</code> for the Elasticsearch domain.</p>
918    #[serde(rename = "EBSOptions")]
919    #[serde(skip_serializing_if = "Option::is_none")]
920    pub ebs_options: Option<EBSOptionsStatus>,
921    /// <p>Specifies the <code>ElasticsearchClusterConfig</code> for the Elasticsearch domain.</p>
922    #[serde(rename = "ElasticsearchClusterConfig")]
923    #[serde(skip_serializing_if = "Option::is_none")]
924    pub elasticsearch_cluster_config: Option<ElasticsearchClusterConfigStatus>,
925    /// <p>String of format X.Y to specify version for the Elasticsearch domain.</p>
926    #[serde(rename = "ElasticsearchVersion")]
927    #[serde(skip_serializing_if = "Option::is_none")]
928    pub elasticsearch_version: Option<ElasticsearchVersionStatus>,
929    /// <p>Specifies the <code>EncryptionAtRestOptions</code> for the Elasticsearch domain.</p>
930    #[serde(rename = "EncryptionAtRestOptions")]
931    #[serde(skip_serializing_if = "Option::is_none")]
932    pub encryption_at_rest_options: Option<EncryptionAtRestOptionsStatus>,
933    /// <p>Log publishing options for the given domain.</p>
934    #[serde(rename = "LogPublishingOptions")]
935    #[serde(skip_serializing_if = "Option::is_none")]
936    pub log_publishing_options: Option<LogPublishingOptionsStatus>,
937    /// <p>Specifies the <code>NodeToNodeEncryptionOptions</code> for the Elasticsearch domain.</p>
938    #[serde(rename = "NodeToNodeEncryptionOptions")]
939    #[serde(skip_serializing_if = "Option::is_none")]
940    pub node_to_node_encryption_options: Option<NodeToNodeEncryptionOptionsStatus>,
941    /// <p>Specifies the <code>SnapshotOptions</code> for the Elasticsearch domain.</p>
942    #[serde(rename = "SnapshotOptions")]
943    #[serde(skip_serializing_if = "Option::is_none")]
944    pub snapshot_options: Option<SnapshotOptionsStatus>,
945    /// <p>The <code>VPCOptions</code> for the specified domain. For more information, see <a href="http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-vpc.html" target="_blank">VPC Endpoints for Amazon Elasticsearch Service Domains</a>.</p>
946    #[serde(rename = "VPCOptions")]
947    #[serde(skip_serializing_if = "Option::is_none")]
948    pub vpc_options: Option<VPCDerivedInfoStatus>,
949}
950
951/// <p>The current status of an Elasticsearch domain.</p>
952#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
953#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
954pub struct ElasticsearchDomainStatus {
955    /// <p>The Amazon resource name (ARN) of an Elasticsearch domain. See <a href="http://docs.aws.amazon.com/IAM/latest/UserGuide/index.html?Using_Identifiers.html" target="_blank">Identifiers for IAM Entities</a> in <i>Using AWS Identity and Access Management</i> for more information.</p>
956    #[serde(rename = "ARN")]
957    pub arn: String,
958    /// <p> IAM access policy as a JSON-formatted string.</p>
959    #[serde(rename = "AccessPolicies")]
960    #[serde(skip_serializing_if = "Option::is_none")]
961    pub access_policies: Option<String>,
962    /// <p>Specifies the status of the <code>AdvancedOptions</code></p>
963    #[serde(rename = "AdvancedOptions")]
964    #[serde(skip_serializing_if = "Option::is_none")]
965    pub advanced_options: Option<::std::collections::HashMap<String, String>>,
966    /// <p>The current status of the Elasticsearch domain's advanced security options.</p>
967    #[serde(rename = "AdvancedSecurityOptions")]
968    #[serde(skip_serializing_if = "Option::is_none")]
969    pub advanced_security_options: Option<AdvancedSecurityOptions>,
970    /// <p>The <code>CognitoOptions</code> for the specified domain. For more information, see <a href="http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-cognito-auth.html" target="_blank">Amazon Cognito Authentication for Kibana</a>.</p>
971    #[serde(rename = "CognitoOptions")]
972    #[serde(skip_serializing_if = "Option::is_none")]
973    pub cognito_options: Option<CognitoOptions>,
974    /// <p>The domain creation status. <code>True</code> if the creation of an Elasticsearch domain is complete. <code>False</code> if domain creation is still in progress.</p>
975    #[serde(rename = "Created")]
976    #[serde(skip_serializing_if = "Option::is_none")]
977    pub created: Option<bool>,
978    /// <p>The domain deletion status. <code>True</code> if a delete request has been received for the domain but resource cleanup is still in progress. <code>False</code> if the domain has not been deleted. Once domain deletion is complete, the status of the domain is no longer returned.</p>
979    #[serde(rename = "Deleted")]
980    #[serde(skip_serializing_if = "Option::is_none")]
981    pub deleted: Option<bool>,
982    /// <p>The current status of the Elasticsearch domain's endpoint options.</p>
983    #[serde(rename = "DomainEndpointOptions")]
984    #[serde(skip_serializing_if = "Option::is_none")]
985    pub domain_endpoint_options: Option<DomainEndpointOptions>,
986    /// <p>The unique identifier for the specified Elasticsearch domain.</p>
987    #[serde(rename = "DomainId")]
988    pub domain_id: String,
989    /// <p>The name of an Elasticsearch domain. Domain names are unique across the domains owned by an account within an AWS region. Domain names start with a letter or number and can contain the following characters: a-z (lowercase), 0-9, and - (hyphen).</p>
990    #[serde(rename = "DomainName")]
991    pub domain_name: String,
992    /// <p>The <code>EBSOptions</code> for the specified domain. See <a href="http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-createupdatedomains.html#es-createdomain-configure-ebs" target="_blank">Configuring EBS-based Storage</a> for more information.</p>
993    #[serde(rename = "EBSOptions")]
994    #[serde(skip_serializing_if = "Option::is_none")]
995    pub ebs_options: Option<EBSOptions>,
996    /// <p>The type and number of instances in the domain cluster.</p>
997    #[serde(rename = "ElasticsearchClusterConfig")]
998    pub elasticsearch_cluster_config: ElasticsearchClusterConfig,
999    #[serde(rename = "ElasticsearchVersion")]
1000    #[serde(skip_serializing_if = "Option::is_none")]
1001    pub elasticsearch_version: Option<String>,
1002    /// <p> Specifies the status of the <code>EncryptionAtRestOptions</code>.</p>
1003    #[serde(rename = "EncryptionAtRestOptions")]
1004    #[serde(skip_serializing_if = "Option::is_none")]
1005    pub encryption_at_rest_options: Option<EncryptionAtRestOptions>,
1006    /// <p>The Elasticsearch domain endpoint that you use to submit index and search requests.</p>
1007    #[serde(rename = "Endpoint")]
1008    #[serde(skip_serializing_if = "Option::is_none")]
1009    pub endpoint: Option<String>,
1010    /// <p>Map containing the Elasticsearch domain endpoints used to submit index and search requests. Example <code>key, value</code>: <code>'vpc','vpc-endpoint-h2dsd34efgyghrtguk5gt6j2foh4.us-east-1.es.amazonaws.com'</code>.</p>
1011    #[serde(rename = "Endpoints")]
1012    #[serde(skip_serializing_if = "Option::is_none")]
1013    pub endpoints: Option<::std::collections::HashMap<String, String>>,
1014    /// <p>Log publishing options for the given domain.</p>
1015    #[serde(rename = "LogPublishingOptions")]
1016    #[serde(skip_serializing_if = "Option::is_none")]
1017    pub log_publishing_options: Option<::std::collections::HashMap<String, LogPublishingOption>>,
1018    /// <p>Specifies the status of the <code>NodeToNodeEncryptionOptions</code>.</p>
1019    #[serde(rename = "NodeToNodeEncryptionOptions")]
1020    #[serde(skip_serializing_if = "Option::is_none")]
1021    pub node_to_node_encryption_options: Option<NodeToNodeEncryptionOptions>,
1022    /// <p>The status of the Elasticsearch domain configuration. <code>True</code> if Amazon Elasticsearch Service is processing configuration changes. <code>False</code> if the configuration is active.</p>
1023    #[serde(rename = "Processing")]
1024    #[serde(skip_serializing_if = "Option::is_none")]
1025    pub processing: Option<bool>,
1026    /// <p>The current status of the Elasticsearch domain's service software.</p>
1027    #[serde(rename = "ServiceSoftwareOptions")]
1028    #[serde(skip_serializing_if = "Option::is_none")]
1029    pub service_software_options: Option<ServiceSoftwareOptions>,
1030    /// <p>Specifies the status of the <code>SnapshotOptions</code></p>
1031    #[serde(rename = "SnapshotOptions")]
1032    #[serde(skip_serializing_if = "Option::is_none")]
1033    pub snapshot_options: Option<SnapshotOptions>,
1034    /// <p>The status of an Elasticsearch domain version upgrade. <code>True</code> if Amazon Elasticsearch Service is undergoing a version upgrade. <code>False</code> if the configuration is active.</p>
1035    #[serde(rename = "UpgradeProcessing")]
1036    #[serde(skip_serializing_if = "Option::is_none")]
1037    pub upgrade_processing: Option<bool>,
1038    /// <p>The <code>VPCOptions</code> for the specified domain. For more information, see <a href="http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-vpc.html" target="_blank">VPC Endpoints for Amazon Elasticsearch Service Domains</a>.</p>
1039    #[serde(rename = "VPCOptions")]
1040    #[serde(skip_serializing_if = "Option::is_none")]
1041    pub vpc_options: Option<VPCDerivedInfo>,
1042}
1043
1044/// <p> Status of the Elasticsearch version options for the specified Elasticsearch domain.</p>
1045#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1046#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1047pub struct ElasticsearchVersionStatus {
1048    /// <p> Specifies the Elasticsearch version for the specified Elasticsearch domain.</p>
1049    #[serde(rename = "Options")]
1050    pub options: String,
1051    /// <p> Specifies the status of the Elasticsearch version options for the specified Elasticsearch domain.</p>
1052    #[serde(rename = "Status")]
1053    pub status: OptionStatus,
1054}
1055
1056/// <p>Specifies the Encryption At Rest Options.</p>
1057#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1058pub struct EncryptionAtRestOptions {
1059    /// <p>Specifies the option to enable Encryption At Rest.</p>
1060    #[serde(rename = "Enabled")]
1061    #[serde(skip_serializing_if = "Option::is_none")]
1062    pub enabled: Option<bool>,
1063    /// <p> Specifies the KMS Key ID for Encryption At Rest options.</p>
1064    #[serde(rename = "KmsKeyId")]
1065    #[serde(skip_serializing_if = "Option::is_none")]
1066    pub kms_key_id: Option<String>,
1067}
1068
1069/// <p> Status of the Encryption At Rest options for the specified Elasticsearch domain.</p>
1070#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1071#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1072pub struct EncryptionAtRestOptionsStatus {
1073    /// <p> Specifies the Encryption At Rest options for the specified Elasticsearch domain.</p>
1074    #[serde(rename = "Options")]
1075    pub options: EncryptionAtRestOptions,
1076    /// <p> Specifies the status of the Encryption At Rest options for the specified Elasticsearch domain.</p>
1077    #[serde(rename = "Status")]
1078    pub status: OptionStatus,
1079}
1080
1081#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1082#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1083pub struct ErrorDetails {
1084    #[serde(rename = "ErrorMessage")]
1085    #[serde(skip_serializing_if = "Option::is_none")]
1086    pub error_message: Option<String>,
1087    #[serde(rename = "ErrorType")]
1088    #[serde(skip_serializing_if = "Option::is_none")]
1089    pub error_type: Option<String>,
1090}
1091
1092/// <p> A filter used to limit results when describing inbound or outbound cross-cluster search connections. Multiple values can be specified per filter. A cross-cluster search connection must match at least one of the specified values for it to be returned from an operation. </p>
1093#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1094#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1095pub struct Filter {
1096    /// <p> Specifies the name of the filter. </p>
1097    #[serde(rename = "Name")]
1098    #[serde(skip_serializing_if = "Option::is_none")]
1099    pub name: Option<String>,
1100    /// <p> Contains one or more values for the filter. </p>
1101    #[serde(rename = "Values")]
1102    #[serde(skip_serializing_if = "Option::is_none")]
1103    pub values: Option<Vec<String>>,
1104}
1105
1106/// <p> Container for request parameters to <code> <a>GetCompatibleElasticsearchVersions</a> </code> operation. </p>
1107#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1108#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1109pub struct GetCompatibleElasticsearchVersionsRequest {
1110    #[serde(rename = "DomainName")]
1111    #[serde(skip_serializing_if = "Option::is_none")]
1112    pub domain_name: Option<String>,
1113}
1114
1115/// <p> Container for response returned by <code> <a>GetCompatibleElasticsearchVersions</a> </code> operation. </p>
1116#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1117#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1118pub struct GetCompatibleElasticsearchVersionsResponse {
1119    /// <p> A map of compatible Elasticsearch versions returned as part of the <code> <a>GetCompatibleElasticsearchVersions</a> </code> operation. </p>
1120    #[serde(rename = "CompatibleElasticsearchVersions")]
1121    #[serde(skip_serializing_if = "Option::is_none")]
1122    pub compatible_elasticsearch_versions: Option<Vec<CompatibleVersionsMap>>,
1123}
1124
1125/// <p> Container for request parameters to <code> <a>GetUpgradeHistory</a> </code> operation. </p>
1126#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1127#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1128pub struct GetUpgradeHistoryRequest {
1129    #[serde(rename = "DomainName")]
1130    pub domain_name: String,
1131    #[serde(rename = "MaxResults")]
1132    #[serde(skip_serializing_if = "Option::is_none")]
1133    pub max_results: Option<i64>,
1134    #[serde(rename = "NextToken")]
1135    #[serde(skip_serializing_if = "Option::is_none")]
1136    pub next_token: Option<String>,
1137}
1138
1139/// <p> Container for response returned by <code> <a>GetUpgradeHistory</a> </code> operation. </p>
1140#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1141#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1142pub struct GetUpgradeHistoryResponse {
1143    /// <p>Pagination token that needs to be supplied to the next call to get the next page of results</p>
1144    #[serde(rename = "NextToken")]
1145    #[serde(skip_serializing_if = "Option::is_none")]
1146    pub next_token: Option<String>,
1147    /// <p> A list of <code> <a>UpgradeHistory</a> </code> objects corresponding to each Upgrade or Upgrade Eligibility Check performed on a domain returned as part of <code> <a>GetUpgradeHistoryResponse</a> </code> object. </p>
1148    #[serde(rename = "UpgradeHistories")]
1149    #[serde(skip_serializing_if = "Option::is_none")]
1150    pub upgrade_histories: Option<Vec<UpgradeHistory>>,
1151}
1152
1153/// <p> Container for request parameters to <code> <a>GetUpgradeStatus</a> </code> operation. </p>
1154#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1155#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1156pub struct GetUpgradeStatusRequest {
1157    #[serde(rename = "DomainName")]
1158    pub domain_name: String,
1159}
1160
1161/// <p> Container for response returned by <code> <a>GetUpgradeStatus</a> </code> operation. </p>
1162#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1163#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1164pub struct GetUpgradeStatusResponse {
1165    /// <p> One of 4 statuses that a step can go through returned as part of the <code> <a>GetUpgradeStatusResponse</a> </code> object. The status can take one of the following values: <ul> <li>In Progress</li> <li>Succeeded</li> <li>Succeeded with Issues</li> <li>Failed</li> </ul> </p>
1166    #[serde(rename = "StepStatus")]
1167    #[serde(skip_serializing_if = "Option::is_none")]
1168    pub step_status: Option<String>,
1169    /// <p>A string that describes the update briefly</p>
1170    #[serde(rename = "UpgradeName")]
1171    #[serde(skip_serializing_if = "Option::is_none")]
1172    pub upgrade_name: Option<String>,
1173    /// <p> Represents one of 3 steps that an Upgrade or Upgrade Eligibility Check does through: <ul> <li>PreUpgradeCheck</li> <li>Snapshot</li> <li>Upgrade</li> </ul> </p>
1174    #[serde(rename = "UpgradeStep")]
1175    #[serde(skip_serializing_if = "Option::is_none")]
1176    pub upgrade_step: Option<String>,
1177}
1178
1179/// <p>Specifies details of an inbound connection.</p>
1180#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1181#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1182pub struct InboundCrossClusterSearchConnection {
1183    /// <p>Specifies the <code><a>InboundCrossClusterSearchConnectionStatus</a></code> for the outbound connection.</p>
1184    #[serde(rename = "ConnectionStatus")]
1185    #[serde(skip_serializing_if = "Option::is_none")]
1186    pub connection_status: Option<InboundCrossClusterSearchConnectionStatus>,
1187    /// <p>Specifies the connection id for the inbound cross-cluster search connection.</p>
1188    #[serde(rename = "CrossClusterSearchConnectionId")]
1189    #[serde(skip_serializing_if = "Option::is_none")]
1190    pub cross_cluster_search_connection_id: Option<String>,
1191    /// <p>Specifies the <code><a>DomainInformation</a></code> for the destination Elasticsearch domain.</p>
1192    #[serde(rename = "DestinationDomainInfo")]
1193    #[serde(skip_serializing_if = "Option::is_none")]
1194    pub destination_domain_info: Option<DomainInformation>,
1195    /// <p>Specifies the <code><a>DomainInformation</a></code> for the source Elasticsearch domain.</p>
1196    #[serde(rename = "SourceDomainInfo")]
1197    #[serde(skip_serializing_if = "Option::is_none")]
1198    pub source_domain_info: Option<DomainInformation>,
1199}
1200
1201/// <p>Specifies the coonection status of an inbound cross-cluster search connection.</p>
1202#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1203#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1204pub struct InboundCrossClusterSearchConnectionStatus {
1205    /// <p>Specifies verbose information for the inbound connection status.</p>
1206    #[serde(rename = "Message")]
1207    #[serde(skip_serializing_if = "Option::is_none")]
1208    pub message: Option<String>,
1209    /// <p><p>The state code for inbound connection. This can be one of the following:</p> <ul> <li>PENDING_ACCEPTANCE: Inbound connection is not yet accepted by destination domain owner.</li> <li>APPROVED: Inbound connection is pending acceptance by destination domain owner.</li> <li>REJECTING: Inbound connection rejection is in process.</li> <li>REJECTED: Inbound connection is rejected.</li> <li>DELETING: Inbound connection deletion is in progress.</li> <li>DELETED: Inbound connection is deleted and cannot be used further.</li> </ul></p>
1210    #[serde(rename = "StatusCode")]
1211    #[serde(skip_serializing_if = "Option::is_none")]
1212    pub status_code: Option<String>,
1213}
1214
1215/// <p> InstanceCountLimits represents the limits on number of instances that be created in Amazon Elasticsearch for given InstanceType. </p>
1216#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1217#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1218pub struct InstanceCountLimits {
1219    #[serde(rename = "MaximumInstanceCount")]
1220    #[serde(skip_serializing_if = "Option::is_none")]
1221    pub maximum_instance_count: Option<i64>,
1222    #[serde(rename = "MinimumInstanceCount")]
1223    #[serde(skip_serializing_if = "Option::is_none")]
1224    pub minimum_instance_count: Option<i64>,
1225}
1226
1227/// <p>InstanceLimits represents the list of instance related attributes that are available for given InstanceType. </p>
1228#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1229#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1230pub struct InstanceLimits {
1231    #[serde(rename = "InstanceCountLimits")]
1232    #[serde(skip_serializing_if = "Option::is_none")]
1233    pub instance_count_limits: Option<InstanceCountLimits>,
1234}
1235
1236/// <p> Limits for given InstanceType and for each of it's role. <br/> Limits contains following <code> <a>StorageTypes,</a> </code> <code> <a>InstanceLimits</a> </code> and <code> <a>AdditionalLimits</a> </code> </p>
1237#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1238#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1239pub struct Limits {
1240    /// <p> List of additional limits that are specific to a given InstanceType and for each of it's <code> <a>InstanceRole</a> </code> . </p>
1241    #[serde(rename = "AdditionalLimits")]
1242    #[serde(skip_serializing_if = "Option::is_none")]
1243    pub additional_limits: Option<Vec<AdditionalLimit>>,
1244    #[serde(rename = "InstanceLimits")]
1245    #[serde(skip_serializing_if = "Option::is_none")]
1246    pub instance_limits: Option<InstanceLimits>,
1247    /// <p>StorageType represents the list of storage related types and attributes that are available for given InstanceType. </p>
1248    #[serde(rename = "StorageTypes")]
1249    #[serde(skip_serializing_if = "Option::is_none")]
1250    pub storage_types: Option<Vec<StorageType>>,
1251}
1252
1253/// <p>The result of a <code>ListDomainNames</code> operation. Contains the names of all Elasticsearch domains owned by this account.</p>
1254#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1255#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1256pub struct ListDomainNamesResponse {
1257    /// <p>List of Elasticsearch domain names.</p>
1258    #[serde(rename = "DomainNames")]
1259    #[serde(skip_serializing_if = "Option::is_none")]
1260    pub domain_names: Option<Vec<DomainInfo>>,
1261}
1262
1263/// <p> Container for request parameters to <code> <a>ListDomainsForPackage</a> </code> operation. </p>
1264#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1265#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1266pub struct ListDomainsForPackageRequest {
1267    /// <p>Limits results to a maximum number of domains.</p>
1268    #[serde(rename = "MaxResults")]
1269    #[serde(skip_serializing_if = "Option::is_none")]
1270    pub max_results: Option<i64>,
1271    /// <p>Used for pagination. Only necessary if a previous API call includes a non-null NextToken value. If provided, returns results for the next page.</p>
1272    #[serde(rename = "NextToken")]
1273    #[serde(skip_serializing_if = "Option::is_none")]
1274    pub next_token: Option<String>,
1275    /// <p>The package for which to list domains.</p>
1276    #[serde(rename = "PackageID")]
1277    pub package_id: String,
1278}
1279
1280/// <p> Container for response parameters to <code> <a>ListDomainsForPackage</a> </code> operation. </p>
1281#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1282#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1283pub struct ListDomainsForPackageResponse {
1284    /// <p>List of <code>DomainPackageDetails</code> objects.</p>
1285    #[serde(rename = "DomainPackageDetailsList")]
1286    #[serde(skip_serializing_if = "Option::is_none")]
1287    pub domain_package_details_list: Option<Vec<DomainPackageDetails>>,
1288    #[serde(rename = "NextToken")]
1289    #[serde(skip_serializing_if = "Option::is_none")]
1290    pub next_token: Option<String>,
1291}
1292
1293/// <p> Container for the parameters to the <code> <a>ListElasticsearchInstanceTypes</a> </code> operation. </p>
1294#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1295#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1296pub struct ListElasticsearchInstanceTypesRequest {
1297    /// <p>DomainName represents the name of the Domain that we are trying to modify. This should be present only if we are querying for list of available Elasticsearch instance types when modifying existing domain. </p>
1298    #[serde(rename = "DomainName")]
1299    #[serde(skip_serializing_if = "Option::is_none")]
1300    pub domain_name: Option<String>,
1301    /// <p>Version of Elasticsearch for which list of supported elasticsearch instance types are needed. </p>
1302    #[serde(rename = "ElasticsearchVersion")]
1303    pub elasticsearch_version: String,
1304    /// <p> Set this value to limit the number of results returned. Value provided must be greater than 30 else it wont be honored. </p>
1305    #[serde(rename = "MaxResults")]
1306    #[serde(skip_serializing_if = "Option::is_none")]
1307    pub max_results: Option<i64>,
1308    /// <p>NextToken should be sent in case if earlier API call produced result containing NextToken. It is used for pagination. </p>
1309    #[serde(rename = "NextToken")]
1310    #[serde(skip_serializing_if = "Option::is_none")]
1311    pub next_token: Option<String>,
1312}
1313
1314/// <p> Container for the parameters returned by <code> <a>ListElasticsearchInstanceTypes</a> </code> operation. </p>
1315#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1316#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1317pub struct ListElasticsearchInstanceTypesResponse {
1318    /// <p> List of instance types supported by Amazon Elasticsearch service for given <code> <a>ElasticsearchVersion</a> </code> </p>
1319    #[serde(rename = "ElasticsearchInstanceTypes")]
1320    #[serde(skip_serializing_if = "Option::is_none")]
1321    pub elasticsearch_instance_types: Option<Vec<String>>,
1322    /// <p>In case if there are more results available NextToken would be present, make further request to the same API with received NextToken to paginate remaining results. </p>
1323    #[serde(rename = "NextToken")]
1324    #[serde(skip_serializing_if = "Option::is_none")]
1325    pub next_token: Option<String>,
1326}
1327
1328/// <p> Container for the parameters to the <code> <a>ListElasticsearchVersions</a> </code> operation. <p> Use <code> <a>MaxResults</a> </code> to control the maximum number of results to retrieve in a single call. </p> <p> Use <code> <a>NextToken</a> </code> in response to retrieve more results. If the received response does not contain a NextToken, then there are no more results to retrieve. </p> </p>
1329#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1330#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1331pub struct ListElasticsearchVersionsRequest {
1332    /// <p> Set this value to limit the number of results returned. Value provided must be greater than 10 else it wont be honored. </p>
1333    #[serde(rename = "MaxResults")]
1334    #[serde(skip_serializing_if = "Option::is_none")]
1335    pub max_results: Option<i64>,
1336    #[serde(rename = "NextToken")]
1337    #[serde(skip_serializing_if = "Option::is_none")]
1338    pub next_token: Option<String>,
1339}
1340
1341/// <p> Container for the parameters for response received from <code> <a>ListElasticsearchVersions</a> </code> operation. </p>
1342#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1343#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1344pub struct ListElasticsearchVersionsResponse {
1345    #[serde(rename = "ElasticsearchVersions")]
1346    #[serde(skip_serializing_if = "Option::is_none")]
1347    pub elasticsearch_versions: Option<Vec<String>>,
1348    #[serde(rename = "NextToken")]
1349    #[serde(skip_serializing_if = "Option::is_none")]
1350    pub next_token: Option<String>,
1351}
1352
1353/// <p> Container for request parameters to <code> <a>ListPackagesForDomain</a> </code> operation. </p>
1354#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1355#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1356pub struct ListPackagesForDomainRequest {
1357    /// <p>The name of the domain for which you want to list associated packages.</p>
1358    #[serde(rename = "DomainName")]
1359    pub domain_name: String,
1360    /// <p>Limits results to a maximum number of packages.</p>
1361    #[serde(rename = "MaxResults")]
1362    #[serde(skip_serializing_if = "Option::is_none")]
1363    pub max_results: Option<i64>,
1364    /// <p>Used for pagination. Only necessary if a previous API call includes a non-null NextToken value. If provided, returns results for the next page.</p>
1365    #[serde(rename = "NextToken")]
1366    #[serde(skip_serializing_if = "Option::is_none")]
1367    pub next_token: Option<String>,
1368}
1369
1370/// <p> Container for response parameters to <code> <a>ListPackagesForDomain</a> </code> operation. </p>
1371#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1372#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1373pub struct ListPackagesForDomainResponse {
1374    /// <p>List of <code>DomainPackageDetails</code> objects.</p>
1375    #[serde(rename = "DomainPackageDetailsList")]
1376    #[serde(skip_serializing_if = "Option::is_none")]
1377    pub domain_package_details_list: Option<Vec<DomainPackageDetails>>,
1378    /// <p>Pagination token that needs to be supplied to the next call to get the next page of results.</p>
1379    #[serde(rename = "NextToken")]
1380    #[serde(skip_serializing_if = "Option::is_none")]
1381    pub next_token: Option<String>,
1382}
1383
1384/// <p>Container for the parameters to the <code><a>ListTags</a></code> operation. Specify the <code>ARN</code> for the Elasticsearch domain to which the tags are attached that you want to view are attached.</p>
1385#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1386#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1387pub struct ListTagsRequest {
1388    /// <p> Specify the <code>ARN</code> for the Elasticsearch domain to which the tags are attached that you want to view.</p>
1389    #[serde(rename = "ARN")]
1390    pub arn: String,
1391}
1392
1393/// <p>The result of a <code>ListTags</code> operation. Contains tags for all requested Elasticsearch domains.</p>
1394#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1395#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1396pub struct ListTagsResponse {
1397    /// <p> List of <code>Tag</code> for the requested Elasticsearch domain.</p>
1398    #[serde(rename = "TagList")]
1399    #[serde(skip_serializing_if = "Option::is_none")]
1400    pub tag_list: Option<Vec<Tag>>,
1401}
1402
1403/// <p>Log Publishing option that is set for given domain. <br/>Attributes and their details: <ul> <li>CloudWatchLogsLogGroupArn: ARN of the Cloudwatch log group to which log needs to be published.</li> <li>Enabled: Whether the log publishing for given log type is enabled or not</li> </ul> </p>
1404#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1405pub struct LogPublishingOption {
1406    #[serde(rename = "CloudWatchLogsLogGroupArn")]
1407    #[serde(skip_serializing_if = "Option::is_none")]
1408    pub cloud_watch_logs_log_group_arn: Option<String>,
1409    /// <p> Specifies whether given log publishing option is enabled or not.</p>
1410    #[serde(rename = "Enabled")]
1411    #[serde(skip_serializing_if = "Option::is_none")]
1412    pub enabled: Option<bool>,
1413}
1414
1415/// <p>The configured log publishing options for the domain and their current status.</p>
1416#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1417#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1418pub struct LogPublishingOptionsStatus {
1419    /// <p>The log publishing options configured for the Elasticsearch domain.</p>
1420    #[serde(rename = "Options")]
1421    #[serde(skip_serializing_if = "Option::is_none")]
1422    pub options: Option<::std::collections::HashMap<String, LogPublishingOption>>,
1423    /// <p>The status of the log publishing options for the Elasticsearch domain. See <code>OptionStatus</code> for the status information that's included. </p>
1424    #[serde(rename = "Status")]
1425    #[serde(skip_serializing_if = "Option::is_none")]
1426    pub status: Option<OptionStatus>,
1427}
1428
1429/// <p>Credentials for the master user: username and password, ARN, or both.</p>
1430#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1431#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1432pub struct MasterUserOptions {
1433    /// <p>ARN for the master user (if IAM is enabled).</p>
1434    #[serde(rename = "MasterUserARN")]
1435    #[serde(skip_serializing_if = "Option::is_none")]
1436    pub master_user_arn: Option<String>,
1437    /// <p>The master user's username, which is stored in the Amazon Elasticsearch Service domain's internal database.</p>
1438    #[serde(rename = "MasterUserName")]
1439    #[serde(skip_serializing_if = "Option::is_none")]
1440    pub master_user_name: Option<String>,
1441    /// <p>The master user's password, which is stored in the Amazon Elasticsearch Service domain's internal database.</p>
1442    #[serde(rename = "MasterUserPassword")]
1443    #[serde(skip_serializing_if = "Option::is_none")]
1444    pub master_user_password: Option<String>,
1445}
1446
1447/// <p>Specifies the node-to-node encryption options.</p>
1448#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1449pub struct NodeToNodeEncryptionOptions {
1450    /// <p>Specify true to enable node-to-node encryption.</p>
1451    #[serde(rename = "Enabled")]
1452    #[serde(skip_serializing_if = "Option::is_none")]
1453    pub enabled: Option<bool>,
1454}
1455
1456/// <p>Status of the node-to-node encryption options for the specified Elasticsearch domain.</p>
1457#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1458#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1459pub struct NodeToNodeEncryptionOptionsStatus {
1460    /// <p>Specifies the node-to-node encryption options for the specified Elasticsearch domain.</p>
1461    #[serde(rename = "Options")]
1462    pub options: NodeToNodeEncryptionOptions,
1463    /// <p>Specifies the status of the node-to-node encryption options for the specified Elasticsearch domain.</p>
1464    #[serde(rename = "Status")]
1465    pub status: OptionStatus,
1466}
1467
1468/// <p>Provides the current status of the entity.</p>
1469#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1470#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1471pub struct OptionStatus {
1472    /// <p>Timestamp which tells the creation date for the entity.</p>
1473    #[serde(rename = "CreationDate")]
1474    pub creation_date: f64,
1475    /// <p>Indicates whether the Elasticsearch domain is being deleted.</p>
1476    #[serde(rename = "PendingDeletion")]
1477    #[serde(skip_serializing_if = "Option::is_none")]
1478    pub pending_deletion: Option<bool>,
1479    /// <p>Provides the <code>OptionState</code> for the Elasticsearch domain.</p>
1480    #[serde(rename = "State")]
1481    pub state: String,
1482    /// <p>Timestamp which tells the last updated time for the entity.</p>
1483    #[serde(rename = "UpdateDate")]
1484    pub update_date: f64,
1485    /// <p>Specifies the latest version for the entity.</p>
1486    #[serde(rename = "UpdateVersion")]
1487    #[serde(skip_serializing_if = "Option::is_none")]
1488    pub update_version: Option<i64>,
1489}
1490
1491/// <p>Specifies details of an outbound connection.</p>
1492#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1493#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1494pub struct OutboundCrossClusterSearchConnection {
1495    /// <p>Specifies the connection alias for the outbound cross-cluster search connection.</p>
1496    #[serde(rename = "ConnectionAlias")]
1497    #[serde(skip_serializing_if = "Option::is_none")]
1498    pub connection_alias: Option<String>,
1499    /// <p>Specifies the <code><a>OutboundCrossClusterSearchConnectionStatus</a></code> for the outbound connection.</p>
1500    #[serde(rename = "ConnectionStatus")]
1501    #[serde(skip_serializing_if = "Option::is_none")]
1502    pub connection_status: Option<OutboundCrossClusterSearchConnectionStatus>,
1503    /// <p>Specifies the connection id for the outbound cross-cluster search connection.</p>
1504    #[serde(rename = "CrossClusterSearchConnectionId")]
1505    #[serde(skip_serializing_if = "Option::is_none")]
1506    pub cross_cluster_search_connection_id: Option<String>,
1507    /// <p>Specifies the <code><a>DomainInformation</a></code> for the destination Elasticsearch domain.</p>
1508    #[serde(rename = "DestinationDomainInfo")]
1509    #[serde(skip_serializing_if = "Option::is_none")]
1510    pub destination_domain_info: Option<DomainInformation>,
1511    /// <p>Specifies the <code><a>DomainInformation</a></code> for the source Elasticsearch domain.</p>
1512    #[serde(rename = "SourceDomainInfo")]
1513    #[serde(skip_serializing_if = "Option::is_none")]
1514    pub source_domain_info: Option<DomainInformation>,
1515}
1516
1517/// <p>Specifies the connection status of an outbound cross-cluster search connection.</p>
1518#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1519#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1520pub struct OutboundCrossClusterSearchConnectionStatus {
1521    /// <p>Specifies verbose information for the outbound connection status.</p>
1522    #[serde(rename = "Message")]
1523    #[serde(skip_serializing_if = "Option::is_none")]
1524    pub message: Option<String>,
1525    /// <p><p>The state code for outbound connection. This can be one of the following:</p> <ul> <li>VALIDATING: The outbound connection request is being validated.</li> <li>VALIDATION<em>FAILED: Validation failed for the connection request.</li> <li>PENDING</em>ACCEPTANCE: Outbound connection request is validated and is not yet accepted by destination domain owner.</li> <li>PROVISIONING: Outbound connection request is in process.</li> <li>ACTIVE: Outbound connection is active and ready to use.</li> <li>REJECTED: Outbound connection request is rejected by destination domain owner.</li> <li>DELETING: Outbound connection deletion is in progress.</li> <li>DELETED: Outbound connection is deleted and cannot be used further.</li> </ul></p>
1526    #[serde(rename = "StatusCode")]
1527    #[serde(skip_serializing_if = "Option::is_none")]
1528    pub status_code: Option<String>,
1529}
1530
1531/// <p>Basic information about a package.</p>
1532#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1533#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1534pub struct PackageDetails {
1535    /// <p>Timestamp which tells creation date of the package.</p>
1536    #[serde(rename = "CreatedAt")]
1537    #[serde(skip_serializing_if = "Option::is_none")]
1538    pub created_at: Option<f64>,
1539    /// <p>Additional information if the package is in an error state. Null otherwise.</p>
1540    #[serde(rename = "ErrorDetails")]
1541    #[serde(skip_serializing_if = "Option::is_none")]
1542    pub error_details: Option<ErrorDetails>,
1543    /// <p>User-specified description of the package.</p>
1544    #[serde(rename = "PackageDescription")]
1545    #[serde(skip_serializing_if = "Option::is_none")]
1546    pub package_description: Option<String>,
1547    /// <p>Internal ID of the package.</p>
1548    #[serde(rename = "PackageID")]
1549    #[serde(skip_serializing_if = "Option::is_none")]
1550    pub package_id: Option<String>,
1551    /// <p>User specified name of the package.</p>
1552    #[serde(rename = "PackageName")]
1553    #[serde(skip_serializing_if = "Option::is_none")]
1554    pub package_name: Option<String>,
1555    /// <p>Current state of the package. Values are COPYING/COPY_FAILED/AVAILABLE/DELETING/DELETE_FAILED</p>
1556    #[serde(rename = "PackageStatus")]
1557    #[serde(skip_serializing_if = "Option::is_none")]
1558    pub package_status: Option<String>,
1559    /// <p>Currently supports only TXT-DICTIONARY.</p>
1560    #[serde(rename = "PackageType")]
1561    #[serde(skip_serializing_if = "Option::is_none")]
1562    pub package_type: Option<String>,
1563}
1564
1565/// <p>The S3 location for importing the package specified as <code>S3BucketName</code> and <code>S3Key</code></p>
1566#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1567#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1568pub struct PackageSource {
1569    /// <p>Name of the bucket containing the package.</p>
1570    #[serde(rename = "S3BucketName")]
1571    #[serde(skip_serializing_if = "Option::is_none")]
1572    pub s3_bucket_name: Option<String>,
1573    /// <p>Key (file name) of the package.</p>
1574    #[serde(rename = "S3Key")]
1575    #[serde(skip_serializing_if = "Option::is_none")]
1576    pub s3_key: Option<String>,
1577}
1578
1579/// <p>Container for parameters to <code>PurchaseReservedElasticsearchInstanceOffering</code></p>
1580#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1581#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1582pub struct PurchaseReservedElasticsearchInstanceOfferingRequest {
1583    /// <p>The number of Elasticsearch instances to reserve.</p>
1584    #[serde(rename = "InstanceCount")]
1585    #[serde(skip_serializing_if = "Option::is_none")]
1586    pub instance_count: Option<i64>,
1587    /// <p>A customer-specified identifier to track this reservation.</p>
1588    #[serde(rename = "ReservationName")]
1589    pub reservation_name: String,
1590    /// <p>The ID of the reserved Elasticsearch instance offering to purchase.</p>
1591    #[serde(rename = "ReservedElasticsearchInstanceOfferingId")]
1592    pub reserved_elasticsearch_instance_offering_id: String,
1593}
1594
1595/// <p>Represents the output of a <code>PurchaseReservedElasticsearchInstanceOffering</code> operation.</p>
1596#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1597#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1598pub struct PurchaseReservedElasticsearchInstanceOfferingResponse {
1599    /// <p>The customer-specified identifier used to track this reservation.</p>
1600    #[serde(rename = "ReservationName")]
1601    #[serde(skip_serializing_if = "Option::is_none")]
1602    pub reservation_name: Option<String>,
1603    /// <p>Details of the reserved Elasticsearch instance which was purchased.</p>
1604    #[serde(rename = "ReservedElasticsearchInstanceId")]
1605    #[serde(skip_serializing_if = "Option::is_none")]
1606    pub reserved_elasticsearch_instance_id: Option<String>,
1607}
1608
1609/// <p>Contains the specific price and frequency of a recurring charges for a reserved Elasticsearch instance, or for a reserved Elasticsearch instance offering.</p>
1610#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1611#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1612pub struct RecurringCharge {
1613    /// <p>The monetary amount of the recurring charge.</p>
1614    #[serde(rename = "RecurringChargeAmount")]
1615    #[serde(skip_serializing_if = "Option::is_none")]
1616    pub recurring_charge_amount: Option<f64>,
1617    /// <p>The frequency of the recurring charge.</p>
1618    #[serde(rename = "RecurringChargeFrequency")]
1619    #[serde(skip_serializing_if = "Option::is_none")]
1620    pub recurring_charge_frequency: Option<String>,
1621}
1622
1623/// <p>Container for the parameters to the <code><a>RejectInboundCrossClusterSearchConnection</a></code> operation.</p>
1624#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1625#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1626pub struct RejectInboundCrossClusterSearchConnectionRequest {
1627    /// <p>The id of the inbound connection that you want to reject.</p>
1628    #[serde(rename = "CrossClusterSearchConnectionId")]
1629    pub cross_cluster_search_connection_id: String,
1630}
1631
1632/// <p>The result of a <code><a>RejectInboundCrossClusterSearchConnection</a></code> operation. Contains details of rejected inbound connection.</p>
1633#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1634#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1635pub struct RejectInboundCrossClusterSearchConnectionResponse {
1636    /// <p>Specifies the <code><a>InboundCrossClusterSearchConnection</a></code> of rejected inbound connection. </p>
1637    #[serde(rename = "CrossClusterSearchConnection")]
1638    #[serde(skip_serializing_if = "Option::is_none")]
1639    pub cross_cluster_search_connection: Option<InboundCrossClusterSearchConnection>,
1640}
1641
1642/// <p>Container for the parameters to the <code><a>RemoveTags</a></code> operation. Specify the <code>ARN</code> for the Elasticsearch domain from which you want to remove the specified <code>TagKey</code>.</p>
1643#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1644#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1645pub struct RemoveTagsRequest {
1646    /// <p>Specifies the <code>ARN</code> for the Elasticsearch domain from which you want to delete the specified tags.</p>
1647    #[serde(rename = "ARN")]
1648    pub arn: String,
1649    /// <p>Specifies the <code>TagKey</code> list which you want to remove from the Elasticsearch domain.</p>
1650    #[serde(rename = "TagKeys")]
1651    pub tag_keys: Vec<String>,
1652}
1653
1654/// <p>Details of a reserved Elasticsearch instance.</p>
1655#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1656#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1657pub struct ReservedElasticsearchInstance {
1658    /// <p>The currency code for the reserved Elasticsearch instance offering.</p>
1659    #[serde(rename = "CurrencyCode")]
1660    #[serde(skip_serializing_if = "Option::is_none")]
1661    pub currency_code: Option<String>,
1662    /// <p>The duration, in seconds, for which the Elasticsearch instance is reserved.</p>
1663    #[serde(rename = "Duration")]
1664    #[serde(skip_serializing_if = "Option::is_none")]
1665    pub duration: Option<i64>,
1666    /// <p>The number of Elasticsearch instances that have been reserved.</p>
1667    #[serde(rename = "ElasticsearchInstanceCount")]
1668    #[serde(skip_serializing_if = "Option::is_none")]
1669    pub elasticsearch_instance_count: Option<i64>,
1670    /// <p>The Elasticsearch instance type offered by the reserved instance offering.</p>
1671    #[serde(rename = "ElasticsearchInstanceType")]
1672    #[serde(skip_serializing_if = "Option::is_none")]
1673    pub elasticsearch_instance_type: Option<String>,
1674    /// <p>The upfront fixed charge you will paid to purchase the specific reserved Elasticsearch instance offering. </p>
1675    #[serde(rename = "FixedPrice")]
1676    #[serde(skip_serializing_if = "Option::is_none")]
1677    pub fixed_price: Option<f64>,
1678    /// <p>The payment option as defined in the reserved Elasticsearch instance offering.</p>
1679    #[serde(rename = "PaymentOption")]
1680    #[serde(skip_serializing_if = "Option::is_none")]
1681    pub payment_option: Option<String>,
1682    /// <p>The charge to your account regardless of whether you are creating any domains using the instance offering.</p>
1683    #[serde(rename = "RecurringCharges")]
1684    #[serde(skip_serializing_if = "Option::is_none")]
1685    pub recurring_charges: Option<Vec<RecurringCharge>>,
1686    /// <p>The customer-specified identifier to track this reservation.</p>
1687    #[serde(rename = "ReservationName")]
1688    #[serde(skip_serializing_if = "Option::is_none")]
1689    pub reservation_name: Option<String>,
1690    /// <p>The unique identifier for the reservation.</p>
1691    #[serde(rename = "ReservedElasticsearchInstanceId")]
1692    #[serde(skip_serializing_if = "Option::is_none")]
1693    pub reserved_elasticsearch_instance_id: Option<String>,
1694    /// <p>The offering identifier.</p>
1695    #[serde(rename = "ReservedElasticsearchInstanceOfferingId")]
1696    #[serde(skip_serializing_if = "Option::is_none")]
1697    pub reserved_elasticsearch_instance_offering_id: Option<String>,
1698    /// <p>The time the reservation started.</p>
1699    #[serde(rename = "StartTime")]
1700    #[serde(skip_serializing_if = "Option::is_none")]
1701    pub start_time: Option<f64>,
1702    /// <p>The state of the reserved Elasticsearch instance.</p>
1703    #[serde(rename = "State")]
1704    #[serde(skip_serializing_if = "Option::is_none")]
1705    pub state: Option<String>,
1706    /// <p>The rate you are charged for each hour for the domain that is using this reserved instance.</p>
1707    #[serde(rename = "UsagePrice")]
1708    #[serde(skip_serializing_if = "Option::is_none")]
1709    pub usage_price: Option<f64>,
1710}
1711
1712/// <p>Details of a reserved Elasticsearch instance offering.</p>
1713#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1714#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1715pub struct ReservedElasticsearchInstanceOffering {
1716    /// <p>The currency code for the reserved Elasticsearch instance offering.</p>
1717    #[serde(rename = "CurrencyCode")]
1718    #[serde(skip_serializing_if = "Option::is_none")]
1719    pub currency_code: Option<String>,
1720    /// <p>The duration, in seconds, for which the offering will reserve the Elasticsearch instance.</p>
1721    #[serde(rename = "Duration")]
1722    #[serde(skip_serializing_if = "Option::is_none")]
1723    pub duration: Option<i64>,
1724    /// <p>The Elasticsearch instance type offered by the reserved instance offering.</p>
1725    #[serde(rename = "ElasticsearchInstanceType")]
1726    #[serde(skip_serializing_if = "Option::is_none")]
1727    pub elasticsearch_instance_type: Option<String>,
1728    /// <p>The upfront fixed charge you will pay to purchase the specific reserved Elasticsearch instance offering. </p>
1729    #[serde(rename = "FixedPrice")]
1730    #[serde(skip_serializing_if = "Option::is_none")]
1731    pub fixed_price: Option<f64>,
1732    /// <p>Payment option for the reserved Elasticsearch instance offering</p>
1733    #[serde(rename = "PaymentOption")]
1734    #[serde(skip_serializing_if = "Option::is_none")]
1735    pub payment_option: Option<String>,
1736    /// <p>The charge to your account regardless of whether you are creating any domains using the instance offering.</p>
1737    #[serde(rename = "RecurringCharges")]
1738    #[serde(skip_serializing_if = "Option::is_none")]
1739    pub recurring_charges: Option<Vec<RecurringCharge>>,
1740    /// <p>The Elasticsearch reserved instance offering identifier.</p>
1741    #[serde(rename = "ReservedElasticsearchInstanceOfferingId")]
1742    #[serde(skip_serializing_if = "Option::is_none")]
1743    pub reserved_elasticsearch_instance_offering_id: Option<String>,
1744    /// <p>The rate you are charged for each hour the domain that is using the offering is running.</p>
1745    #[serde(rename = "UsagePrice")]
1746    #[serde(skip_serializing_if = "Option::is_none")]
1747    pub usage_price: Option<f64>,
1748}
1749
1750/// <p>The current options of an Elasticsearch domain service software options.</p>
1751#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1752#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1753pub struct ServiceSoftwareOptions {
1754    /// <p>Timestamp, in Epoch time, until which you can manually request a service software update. After this date, we automatically update your service software.</p>
1755    #[serde(rename = "AutomatedUpdateDate")]
1756    #[serde(skip_serializing_if = "Option::is_none")]
1757    pub automated_update_date: Option<f64>,
1758    /// <p><code>True</code> if you are able to cancel your service software version update. <code>False</code> if you are not able to cancel your service software version. </p>
1759    #[serde(rename = "Cancellable")]
1760    #[serde(skip_serializing_if = "Option::is_none")]
1761    pub cancellable: Option<bool>,
1762    /// <p>The current service software version that is present on the domain.</p>
1763    #[serde(rename = "CurrentVersion")]
1764    #[serde(skip_serializing_if = "Option::is_none")]
1765    pub current_version: Option<String>,
1766    /// <p>The description of the <code>UpdateStatus</code>.</p>
1767    #[serde(rename = "Description")]
1768    #[serde(skip_serializing_if = "Option::is_none")]
1769    pub description: Option<String>,
1770    /// <p>The new service software version if one is available.</p>
1771    #[serde(rename = "NewVersion")]
1772    #[serde(skip_serializing_if = "Option::is_none")]
1773    pub new_version: Option<String>,
1774    /// <p><code>True</code> if a service software is never automatically updated. <code>False</code> if a service software is automatically updated after <code>AutomatedUpdateDate</code>. </p>
1775    #[serde(rename = "OptionalDeployment")]
1776    #[serde(skip_serializing_if = "Option::is_none")]
1777    pub optional_deployment: Option<bool>,
1778    /// <p><code>True</code> if you are able to update you service software version. <code>False</code> if you are not able to update your service software version. </p>
1779    #[serde(rename = "UpdateAvailable")]
1780    #[serde(skip_serializing_if = "Option::is_none")]
1781    pub update_available: Option<bool>,
1782    /// <p>The status of your service software update. This field can take the following values: <code>ELIGIBLE</code>, <code>PENDING_UPDATE</code>, <code>IN_PROGRESS</code>, <code>COMPLETED</code>, and <code>NOT_ELIGIBLE</code>.</p>
1783    #[serde(rename = "UpdateStatus")]
1784    #[serde(skip_serializing_if = "Option::is_none")]
1785    pub update_status: Option<String>,
1786}
1787
1788/// <p>Specifies the time, in UTC format, when the service takes a daily automated snapshot of the specified Elasticsearch domain. Default value is <code>0</code> hours.</p>
1789#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1790pub struct SnapshotOptions {
1791    /// <p>Specifies the time, in UTC format, when the service takes a daily automated snapshot of the specified Elasticsearch domain. Default value is <code>0</code> hours.</p>
1792    #[serde(rename = "AutomatedSnapshotStartHour")]
1793    #[serde(skip_serializing_if = "Option::is_none")]
1794    pub automated_snapshot_start_hour: Option<i64>,
1795}
1796
1797/// <p>Status of a daily automated snapshot.</p>
1798#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1799#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1800pub struct SnapshotOptionsStatus {
1801    /// <p>Specifies the daily snapshot options specified for the Elasticsearch domain.</p>
1802    #[serde(rename = "Options")]
1803    pub options: SnapshotOptions,
1804    /// <p>Specifies the status of a daily automated snapshot.</p>
1805    #[serde(rename = "Status")]
1806    pub status: OptionStatus,
1807}
1808
1809/// <p>Container for the parameters to the <code><a>StartElasticsearchServiceSoftwareUpdate</a></code> operation. Specifies the name of the Elasticsearch domain that you wish to schedule a service software update on.</p>
1810#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1811#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1812pub struct StartElasticsearchServiceSoftwareUpdateRequest {
1813    /// <p>The name of the domain that you want to update to the latest service software.</p>
1814    #[serde(rename = "DomainName")]
1815    pub domain_name: String,
1816}
1817
1818/// <p>The result of a <code>StartElasticsearchServiceSoftwareUpdate</code> operation. Contains the status of the update.</p>
1819#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1820#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1821pub struct StartElasticsearchServiceSoftwareUpdateResponse {
1822    /// <p>The current status of the Elasticsearch service software update.</p>
1823    #[serde(rename = "ServiceSoftwareOptions")]
1824    #[serde(skip_serializing_if = "Option::is_none")]
1825    pub service_software_options: Option<ServiceSoftwareOptions>,
1826}
1827
1828/// <p>StorageTypes represents the list of storage related types and their attributes that are available for given InstanceType. </p>
1829#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1830#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1831pub struct StorageType {
1832    #[serde(rename = "StorageSubTypeName")]
1833    #[serde(skip_serializing_if = "Option::is_none")]
1834    pub storage_sub_type_name: Option<String>,
1835    /// <p>List of limits that are applicable for given storage type. </p>
1836    #[serde(rename = "StorageTypeLimits")]
1837    #[serde(skip_serializing_if = "Option::is_none")]
1838    pub storage_type_limits: Option<Vec<StorageTypeLimit>>,
1839    #[serde(rename = "StorageTypeName")]
1840    #[serde(skip_serializing_if = "Option::is_none")]
1841    pub storage_type_name: Option<String>,
1842}
1843
1844/// <p>Limits that are applicable for given storage type. </p>
1845#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1846#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1847pub struct StorageTypeLimit {
1848    /// <p> Name of storage limits that are applicable for given storage type. If <code> <a>StorageType</a> </code> is ebs, following storage options are applicable <ol> <li>MinimumVolumeSize</li> Minimum amount of volume size that is applicable for given storage type.It can be empty if it is not applicable. <li>MaximumVolumeSize</li> Maximum amount of volume size that is applicable for given storage type.It can be empty if it is not applicable. <li>MaximumIops</li> Maximum amount of Iops that is applicable for given storage type.It can be empty if it is not applicable. <li>MinimumIops</li> Minimum amount of Iops that is applicable for given storage type.It can be empty if it is not applicable. </ol> </p>
1849    #[serde(rename = "LimitName")]
1850    #[serde(skip_serializing_if = "Option::is_none")]
1851    pub limit_name: Option<String>,
1852    /// <p> Values for the <code> <a>StorageTypeLimit$LimitName</a> </code> . </p>
1853    #[serde(rename = "LimitValues")]
1854    #[serde(skip_serializing_if = "Option::is_none")]
1855    pub limit_values: Option<Vec<String>>,
1856}
1857
1858/// <p>Specifies a key value pair for a resource tag.</p>
1859#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1860pub struct Tag {
1861    /// <p>Specifies the <code>TagKey</code>, the name of the tag. Tag keys must be unique for the Elasticsearch domain to which they are attached.</p>
1862    #[serde(rename = "Key")]
1863    pub key: String,
1864    /// <p>Specifies the <code>TagValue</code>, the value assigned to the corresponding tag key. Tag values can be null and do not have to be unique in a tag set. For example, you can have a key value pair in a tag set of <code>project : Trinity</code> and <code>cost-center : Trinity</code></p>
1865    #[serde(rename = "Value")]
1866    pub value: String,
1867}
1868
1869/// <p>Container for the parameters to the <code><a>UpdateElasticsearchDomain</a></code> operation. Specifies the type and number of instances in the domain cluster.</p>
1870#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1871#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1872pub struct UpdateElasticsearchDomainConfigRequest {
1873    /// <p>IAM access policy as a JSON-formatted string.</p>
1874    #[serde(rename = "AccessPolicies")]
1875    #[serde(skip_serializing_if = "Option::is_none")]
1876    pub access_policies: Option<String>,
1877    /// <p>Modifies the advanced option to allow references to indices in an HTTP request body. Must be <code>false</code> when configuring access to individual sub-resources. By default, the value is <code>true</code>. See <a href="http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-createupdatedomains.html#es-createdomain-configure-advanced-options" target="_blank">Configuration Advanced Options</a> for more information.</p>
1878    #[serde(rename = "AdvancedOptions")]
1879    #[serde(skip_serializing_if = "Option::is_none")]
1880    pub advanced_options: Option<::std::collections::HashMap<String, String>>,
1881    /// <p>Specifies advanced security options.</p>
1882    #[serde(rename = "AdvancedSecurityOptions")]
1883    #[serde(skip_serializing_if = "Option::is_none")]
1884    pub advanced_security_options: Option<AdvancedSecurityOptionsInput>,
1885    /// <p>Options to specify the Cognito user and identity pools for Kibana authentication. For more information, see <a href="http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-cognito-auth.html" target="_blank">Amazon Cognito Authentication for Kibana</a>.</p>
1886    #[serde(rename = "CognitoOptions")]
1887    #[serde(skip_serializing_if = "Option::is_none")]
1888    pub cognito_options: Option<CognitoOptions>,
1889    /// <p>Options to specify configuration that will be applied to the domain endpoint.</p>
1890    #[serde(rename = "DomainEndpointOptions")]
1891    #[serde(skip_serializing_if = "Option::is_none")]
1892    pub domain_endpoint_options: Option<DomainEndpointOptions>,
1893    /// <p>The name of the Elasticsearch domain that you are updating. </p>
1894    #[serde(rename = "DomainName")]
1895    pub domain_name: String,
1896    /// <p>Specify the type and size of the EBS volume that you want to use. </p>
1897    #[serde(rename = "EBSOptions")]
1898    #[serde(skip_serializing_if = "Option::is_none")]
1899    pub ebs_options: Option<EBSOptions>,
1900    /// <p>The type and number of instances to instantiate for the domain cluster.</p>
1901    #[serde(rename = "ElasticsearchClusterConfig")]
1902    #[serde(skip_serializing_if = "Option::is_none")]
1903    pub elasticsearch_cluster_config: Option<ElasticsearchClusterConfig>,
1904    /// <p>Map of <code>LogType</code> and <code>LogPublishingOption</code>, each containing options to publish a given type of Elasticsearch log.</p>
1905    #[serde(rename = "LogPublishingOptions")]
1906    #[serde(skip_serializing_if = "Option::is_none")]
1907    pub log_publishing_options: Option<::std::collections::HashMap<String, LogPublishingOption>>,
1908    /// <p>Option to set the time, in UTC format, for the daily automated snapshot. Default value is <code>0</code> hours. </p>
1909    #[serde(rename = "SnapshotOptions")]
1910    #[serde(skip_serializing_if = "Option::is_none")]
1911    pub snapshot_options: Option<SnapshotOptions>,
1912    /// <p>Options to specify the subnets and security groups for VPC endpoint. For more information, see <a href="http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-vpc.html#es-creating-vpc" target="_blank">Creating a VPC</a> in <i>VPC Endpoints for Amazon Elasticsearch Service Domains</i></p>
1913    #[serde(rename = "VPCOptions")]
1914    #[serde(skip_serializing_if = "Option::is_none")]
1915    pub vpc_options: Option<VPCOptions>,
1916}
1917
1918/// <p>The result of an <code>UpdateElasticsearchDomain</code> request. Contains the status of the Elasticsearch domain being updated.</p>
1919#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1920#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1921pub struct UpdateElasticsearchDomainConfigResponse {
1922    /// <p>The status of the updated Elasticsearch domain. </p>
1923    #[serde(rename = "DomainConfig")]
1924    pub domain_config: ElasticsearchDomainConfig,
1925}
1926
1927/// <p> Container for request parameters to <code> <a>UpgradeElasticsearchDomain</a> </code> operation. </p>
1928#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1929#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1930pub struct UpgradeElasticsearchDomainRequest {
1931    #[serde(rename = "DomainName")]
1932    pub domain_name: String,
1933    /// <p> This flag, when set to True, indicates that an Upgrade Eligibility Check needs to be performed. This will not actually perform the Upgrade. </p>
1934    #[serde(rename = "PerformCheckOnly")]
1935    #[serde(skip_serializing_if = "Option::is_none")]
1936    pub perform_check_only: Option<bool>,
1937    /// <p>The version of Elasticsearch that you intend to upgrade the domain to.</p>
1938    #[serde(rename = "TargetVersion")]
1939    pub target_version: String,
1940}
1941
1942/// <p> Container for response returned by <code> <a>UpgradeElasticsearchDomain</a> </code> operation. </p>
1943#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1944#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1945pub struct UpgradeElasticsearchDomainResponse {
1946    #[serde(rename = "DomainName")]
1947    #[serde(skip_serializing_if = "Option::is_none")]
1948    pub domain_name: Option<String>,
1949    /// <p> This flag, when set to True, indicates that an Upgrade Eligibility Check needs to be performed. This will not actually perform the Upgrade. </p>
1950    #[serde(rename = "PerformCheckOnly")]
1951    #[serde(skip_serializing_if = "Option::is_none")]
1952    pub perform_check_only: Option<bool>,
1953    /// <p>The version of Elasticsearch that you intend to upgrade the domain to.</p>
1954    #[serde(rename = "TargetVersion")]
1955    #[serde(skip_serializing_if = "Option::is_none")]
1956    pub target_version: Option<String>,
1957}
1958
1959/// <p>History of the last 10 Upgrades and Upgrade Eligibility Checks.</p>
1960#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1961#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1962pub struct UpgradeHistory {
1963    /// <p>UTC Timestamp at which the Upgrade API call was made in "yyyy-MM-ddTHH:mm:ssZ" format.</p>
1964    #[serde(rename = "StartTimestamp")]
1965    #[serde(skip_serializing_if = "Option::is_none")]
1966    pub start_timestamp: Option<f64>,
1967    /// <p> A list of <code> <a>UpgradeStepItem</a> </code> s representing information about each step performed as pard of a specific Upgrade or Upgrade Eligibility Check. </p>
1968    #[serde(rename = "StepsList")]
1969    #[serde(skip_serializing_if = "Option::is_none")]
1970    pub steps_list: Option<Vec<UpgradeStepItem>>,
1971    /// <p>A string that describes the update briefly</p>
1972    #[serde(rename = "UpgradeName")]
1973    #[serde(skip_serializing_if = "Option::is_none")]
1974    pub upgrade_name: Option<String>,
1975    /// <p> The overall status of the update. The status can take one of the following values: <ul> <li>In Progress</li> <li>Succeeded</li> <li>Succeeded with Issues</li> <li>Failed</li> </ul> </p>
1976    #[serde(rename = "UpgradeStatus")]
1977    #[serde(skip_serializing_if = "Option::is_none")]
1978    pub upgrade_status: Option<String>,
1979}
1980
1981/// <p>Represents a single step of the Upgrade or Upgrade Eligibility Check workflow.</p>
1982#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1983#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1984pub struct UpgradeStepItem {
1985    /// <p>A list of strings containing detailed information about the errors encountered in a particular step.</p>
1986    #[serde(rename = "Issues")]
1987    #[serde(skip_serializing_if = "Option::is_none")]
1988    pub issues: Option<Vec<String>>,
1989    /// <p>The Floating point value representing progress percentage of a particular step.</p>
1990    #[serde(rename = "ProgressPercent")]
1991    #[serde(skip_serializing_if = "Option::is_none")]
1992    pub progress_percent: Option<f64>,
1993    /// <p> Represents one of 3 steps that an Upgrade or Upgrade Eligibility Check does through: <ul> <li>PreUpgradeCheck</li> <li>Snapshot</li> <li>Upgrade</li> </ul> </p>
1994    #[serde(rename = "UpgradeStep")]
1995    #[serde(skip_serializing_if = "Option::is_none")]
1996    pub upgrade_step: Option<String>,
1997    /// <p> The status of a particular step during an upgrade. The status can take one of the following values: <ul> <li>In Progress</li> <li>Succeeded</li> <li>Succeeded with Issues</li> <li>Failed</li> </ul> </p>
1998    #[serde(rename = "UpgradeStepStatus")]
1999    #[serde(skip_serializing_if = "Option::is_none")]
2000    pub upgrade_step_status: Option<String>,
2001}
2002
2003/// <p>Options to specify the subnets and security groups for VPC endpoint. For more information, see <a href="http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-vpc.html" target="_blank"> VPC Endpoints for Amazon Elasticsearch Service Domains</a>.</p>
2004#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2005#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2006pub struct VPCDerivedInfo {
2007    /// <p>The availability zones for the Elasticsearch domain. Exists only if the domain was created with VPCOptions.</p>
2008    #[serde(rename = "AvailabilityZones")]
2009    #[serde(skip_serializing_if = "Option::is_none")]
2010    pub availability_zones: Option<Vec<String>>,
2011    /// <p>Specifies the security groups for VPC endpoint.</p>
2012    #[serde(rename = "SecurityGroupIds")]
2013    #[serde(skip_serializing_if = "Option::is_none")]
2014    pub security_group_ids: Option<Vec<String>>,
2015    /// <p>Specifies the subnets for VPC endpoint.</p>
2016    #[serde(rename = "SubnetIds")]
2017    #[serde(skip_serializing_if = "Option::is_none")]
2018    pub subnet_ids: Option<Vec<String>>,
2019    /// <p>The VPC Id for the Elasticsearch domain. Exists only if the domain was created with VPCOptions.</p>
2020    #[serde(rename = "VPCId")]
2021    #[serde(skip_serializing_if = "Option::is_none")]
2022    pub vpc_id: Option<String>,
2023}
2024
2025/// <p> Status of the VPC options for the specified Elasticsearch domain.</p>
2026#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2027#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2028pub struct VPCDerivedInfoStatus {
2029    /// <p> Specifies the VPC options for the specified Elasticsearch domain.</p>
2030    #[serde(rename = "Options")]
2031    pub options: VPCDerivedInfo,
2032    /// <p> Specifies the status of the VPC options for the specified Elasticsearch domain.</p>
2033    #[serde(rename = "Status")]
2034    pub status: OptionStatus,
2035}
2036
2037/// <p>Options to specify the subnets and security groups for VPC endpoint. For more information, see <a href="http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-vpc.html" target="_blank"> VPC Endpoints for Amazon Elasticsearch Service Domains</a>.</p>
2038#[derive(Clone, Debug, Default, PartialEq, Serialize)]
2039#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2040pub struct VPCOptions {
2041    /// <p>Specifies the security groups for VPC endpoint.</p>
2042    #[serde(rename = "SecurityGroupIds")]
2043    #[serde(skip_serializing_if = "Option::is_none")]
2044    pub security_group_ids: Option<Vec<String>>,
2045    /// <p>Specifies the subnets for VPC endpoint.</p>
2046    #[serde(rename = "SubnetIds")]
2047    #[serde(skip_serializing_if = "Option::is_none")]
2048    pub subnet_ids: Option<Vec<String>>,
2049}
2050
2051/// <p>Specifies the zone awareness configuration for the domain cluster, such as the number of availability zones.</p>
2052#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2053pub struct ZoneAwarenessConfig {
2054    /// <p>An integer value to indicate the number of availability zones for a domain when zone awareness is enabled. This should be equal to number of subnets if VPC endpoints is enabled</p>
2055    #[serde(rename = "AvailabilityZoneCount")]
2056    #[serde(skip_serializing_if = "Option::is_none")]
2057    pub availability_zone_count: Option<i64>,
2058}
2059
2060/// Errors returned by AcceptInboundCrossClusterSearchConnection
2061#[derive(Debug, PartialEq)]
2062pub enum AcceptInboundCrossClusterSearchConnectionError {
2063    /// <p>An error occured because the client wanted to access a not supported operation. Gives http status code of 409.</p>
2064    DisabledOperation(String),
2065    /// <p>An exception for trying to create more than allowed resources or sub-resources. Gives http status code of 409.</p>
2066    LimitExceeded(String),
2067    /// <p>An exception for accessing or deleting a resource that does not exist. Gives http status code of 400.</p>
2068    ResourceNotFound(String),
2069}
2070
2071impl AcceptInboundCrossClusterSearchConnectionError {
2072    pub fn from_response(
2073        res: BufferedHttpResponse,
2074    ) -> RusotoError<AcceptInboundCrossClusterSearchConnectionError> {
2075        if let Some(err) = proto::json::Error::parse_rest(&res) {
2076            match err.typ.as_str() {
2077                "DisabledOperationException" => {
2078                    return RusotoError::Service(
2079                        AcceptInboundCrossClusterSearchConnectionError::DisabledOperation(err.msg),
2080                    )
2081                }
2082                "LimitExceededException" => {
2083                    return RusotoError::Service(
2084                        AcceptInboundCrossClusterSearchConnectionError::LimitExceeded(err.msg),
2085                    )
2086                }
2087                "ResourceNotFoundException" => {
2088                    return RusotoError::Service(
2089                        AcceptInboundCrossClusterSearchConnectionError::ResourceNotFound(err.msg),
2090                    )
2091                }
2092                "ValidationException" => return RusotoError::Validation(err.msg),
2093                _ => {}
2094            }
2095        }
2096        RusotoError::Unknown(res)
2097    }
2098}
2099impl fmt::Display for AcceptInboundCrossClusterSearchConnectionError {
2100    #[allow(unused_variables)]
2101    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2102        match *self {
2103            AcceptInboundCrossClusterSearchConnectionError::DisabledOperation(ref cause) => {
2104                write!(f, "{}", cause)
2105            }
2106            AcceptInboundCrossClusterSearchConnectionError::LimitExceeded(ref cause) => {
2107                write!(f, "{}", cause)
2108            }
2109            AcceptInboundCrossClusterSearchConnectionError::ResourceNotFound(ref cause) => {
2110                write!(f, "{}", cause)
2111            }
2112        }
2113    }
2114}
2115impl Error for AcceptInboundCrossClusterSearchConnectionError {}
2116/// Errors returned by AddTags
2117#[derive(Debug, PartialEq)]
2118pub enum AddTagsError {
2119    /// <p>An error occurred while processing the request.</p>
2120    Base(String),
2121    /// <p>The request processing has failed because of an unknown error, exception or failure (the failure is internal to the service) . Gives http status code of 500.</p>
2122    Internal(String),
2123    /// <p>An exception for trying to create more than allowed resources or sub-resources. Gives http status code of 409.</p>
2124    LimitExceeded(String),
2125}
2126
2127impl AddTagsError {
2128    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<AddTagsError> {
2129        if let Some(err) = proto::json::Error::parse_rest(&res) {
2130            match err.typ.as_str() {
2131                "BaseException" => return RusotoError::Service(AddTagsError::Base(err.msg)),
2132                "InternalException" => {
2133                    return RusotoError::Service(AddTagsError::Internal(err.msg))
2134                }
2135                "LimitExceededException" => {
2136                    return RusotoError::Service(AddTagsError::LimitExceeded(err.msg))
2137                }
2138                "ValidationException" => return RusotoError::Validation(err.msg),
2139                _ => {}
2140            }
2141        }
2142        RusotoError::Unknown(res)
2143    }
2144}
2145impl fmt::Display for AddTagsError {
2146    #[allow(unused_variables)]
2147    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2148        match *self {
2149            AddTagsError::Base(ref cause) => write!(f, "{}", cause),
2150            AddTagsError::Internal(ref cause) => write!(f, "{}", cause),
2151            AddTagsError::LimitExceeded(ref cause) => write!(f, "{}", cause),
2152        }
2153    }
2154}
2155impl Error for AddTagsError {}
2156/// Errors returned by AssociatePackage
2157#[derive(Debug, PartialEq)]
2158pub enum AssociatePackageError {
2159    /// <p>An error occurred because user does not have permissions to access the resource. Returns HTTP status code 403.</p>
2160    AccessDenied(String),
2161    /// <p>An error occurred while processing the request.</p>
2162    Base(String),
2163    /// <p>An error occurred because the client attempts to remove a resource that is currently in use. Returns HTTP status code 409.</p>
2164    Conflict(String),
2165    /// <p>The request processing has failed because of an unknown error, exception or failure (the failure is internal to the service) . Gives http status code of 500.</p>
2166    Internal(String),
2167    /// <p>An exception for accessing or deleting a resource that does not exist. Gives http status code of 400.</p>
2168    ResourceNotFound(String),
2169}
2170
2171impl AssociatePackageError {
2172    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<AssociatePackageError> {
2173        if let Some(err) = proto::json::Error::parse_rest(&res) {
2174            match err.typ.as_str() {
2175                "AccessDeniedException" => {
2176                    return RusotoError::Service(AssociatePackageError::AccessDenied(err.msg))
2177                }
2178                "BaseException" => {
2179                    return RusotoError::Service(AssociatePackageError::Base(err.msg))
2180                }
2181                "ConflictException" => {
2182                    return RusotoError::Service(AssociatePackageError::Conflict(err.msg))
2183                }
2184                "InternalException" => {
2185                    return RusotoError::Service(AssociatePackageError::Internal(err.msg))
2186                }
2187                "ResourceNotFoundException" => {
2188                    return RusotoError::Service(AssociatePackageError::ResourceNotFound(err.msg))
2189                }
2190                "ValidationException" => return RusotoError::Validation(err.msg),
2191                _ => {}
2192            }
2193        }
2194        RusotoError::Unknown(res)
2195    }
2196}
2197impl fmt::Display for AssociatePackageError {
2198    #[allow(unused_variables)]
2199    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2200        match *self {
2201            AssociatePackageError::AccessDenied(ref cause) => write!(f, "{}", cause),
2202            AssociatePackageError::Base(ref cause) => write!(f, "{}", cause),
2203            AssociatePackageError::Conflict(ref cause) => write!(f, "{}", cause),
2204            AssociatePackageError::Internal(ref cause) => write!(f, "{}", cause),
2205            AssociatePackageError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
2206        }
2207    }
2208}
2209impl Error for AssociatePackageError {}
2210/// Errors returned by CancelElasticsearchServiceSoftwareUpdate
2211#[derive(Debug, PartialEq)]
2212pub enum CancelElasticsearchServiceSoftwareUpdateError {
2213    /// <p>An error occurred while processing the request.</p>
2214    Base(String),
2215    /// <p>The request processing has failed because of an unknown error, exception or failure (the failure is internal to the service) . Gives http status code of 500.</p>
2216    Internal(String),
2217    /// <p>An exception for accessing or deleting a resource that does not exist. Gives http status code of 400.</p>
2218    ResourceNotFound(String),
2219}
2220
2221impl CancelElasticsearchServiceSoftwareUpdateError {
2222    pub fn from_response(
2223        res: BufferedHttpResponse,
2224    ) -> RusotoError<CancelElasticsearchServiceSoftwareUpdateError> {
2225        if let Some(err) = proto::json::Error::parse_rest(&res) {
2226            match err.typ.as_str() {
2227                "BaseException" => {
2228                    return RusotoError::Service(
2229                        CancelElasticsearchServiceSoftwareUpdateError::Base(err.msg),
2230                    )
2231                }
2232                "InternalException" => {
2233                    return RusotoError::Service(
2234                        CancelElasticsearchServiceSoftwareUpdateError::Internal(err.msg),
2235                    )
2236                }
2237                "ResourceNotFoundException" => {
2238                    return RusotoError::Service(
2239                        CancelElasticsearchServiceSoftwareUpdateError::ResourceNotFound(err.msg),
2240                    )
2241                }
2242                "ValidationException" => return RusotoError::Validation(err.msg),
2243                _ => {}
2244            }
2245        }
2246        RusotoError::Unknown(res)
2247    }
2248}
2249impl fmt::Display for CancelElasticsearchServiceSoftwareUpdateError {
2250    #[allow(unused_variables)]
2251    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2252        match *self {
2253            CancelElasticsearchServiceSoftwareUpdateError::Base(ref cause) => {
2254                write!(f, "{}", cause)
2255            }
2256            CancelElasticsearchServiceSoftwareUpdateError::Internal(ref cause) => {
2257                write!(f, "{}", cause)
2258            }
2259            CancelElasticsearchServiceSoftwareUpdateError::ResourceNotFound(ref cause) => {
2260                write!(f, "{}", cause)
2261            }
2262        }
2263    }
2264}
2265impl Error for CancelElasticsearchServiceSoftwareUpdateError {}
2266/// Errors returned by CreateElasticsearchDomain
2267#[derive(Debug, PartialEq)]
2268pub enum CreateElasticsearchDomainError {
2269    /// <p>An error occurred while processing the request.</p>
2270    Base(String),
2271    /// <p>An error occured because the client wanted to access a not supported operation. Gives http status code of 409.</p>
2272    DisabledOperation(String),
2273    /// <p>The request processing has failed because of an unknown error, exception or failure (the failure is internal to the service) . Gives http status code of 500.</p>
2274    Internal(String),
2275    /// <p>An exception for trying to create or access sub-resource that is either invalid or not supported. Gives http status code of 409.</p>
2276    InvalidType(String),
2277    /// <p>An exception for trying to create more than allowed resources or sub-resources. Gives http status code of 409.</p>
2278    LimitExceeded(String),
2279    /// <p>An exception for creating a resource that already exists. Gives http status code of 400.</p>
2280    ResourceAlreadyExists(String),
2281}
2282
2283impl CreateElasticsearchDomainError {
2284    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<CreateElasticsearchDomainError> {
2285        if let Some(err) = proto::json::Error::parse_rest(&res) {
2286            match err.typ.as_str() {
2287                "BaseException" => {
2288                    return RusotoError::Service(CreateElasticsearchDomainError::Base(err.msg))
2289                }
2290                "DisabledOperationException" => {
2291                    return RusotoError::Service(CreateElasticsearchDomainError::DisabledOperation(
2292                        err.msg,
2293                    ))
2294                }
2295                "InternalException" => {
2296                    return RusotoError::Service(CreateElasticsearchDomainError::Internal(err.msg))
2297                }
2298                "InvalidTypeException" => {
2299                    return RusotoError::Service(CreateElasticsearchDomainError::InvalidType(
2300                        err.msg,
2301                    ))
2302                }
2303                "LimitExceededException" => {
2304                    return RusotoError::Service(CreateElasticsearchDomainError::LimitExceeded(
2305                        err.msg,
2306                    ))
2307                }
2308                "ResourceAlreadyExistsException" => {
2309                    return RusotoError::Service(
2310                        CreateElasticsearchDomainError::ResourceAlreadyExists(err.msg),
2311                    )
2312                }
2313                "ValidationException" => return RusotoError::Validation(err.msg),
2314                _ => {}
2315            }
2316        }
2317        RusotoError::Unknown(res)
2318    }
2319}
2320impl fmt::Display for CreateElasticsearchDomainError {
2321    #[allow(unused_variables)]
2322    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2323        match *self {
2324            CreateElasticsearchDomainError::Base(ref cause) => write!(f, "{}", cause),
2325            CreateElasticsearchDomainError::DisabledOperation(ref cause) => write!(f, "{}", cause),
2326            CreateElasticsearchDomainError::Internal(ref cause) => write!(f, "{}", cause),
2327            CreateElasticsearchDomainError::InvalidType(ref cause) => write!(f, "{}", cause),
2328            CreateElasticsearchDomainError::LimitExceeded(ref cause) => write!(f, "{}", cause),
2329            CreateElasticsearchDomainError::ResourceAlreadyExists(ref cause) => {
2330                write!(f, "{}", cause)
2331            }
2332        }
2333    }
2334}
2335impl Error for CreateElasticsearchDomainError {}
2336/// Errors returned by CreateOutboundCrossClusterSearchConnection
2337#[derive(Debug, PartialEq)]
2338pub enum CreateOutboundCrossClusterSearchConnectionError {
2339    /// <p>An error occured because the client wanted to access a not supported operation. Gives http status code of 409.</p>
2340    DisabledOperation(String),
2341    /// <p>The request processing has failed because of an unknown error, exception or failure (the failure is internal to the service) . Gives http status code of 500.</p>
2342    Internal(String),
2343    /// <p>An exception for trying to create more than allowed resources or sub-resources. Gives http status code of 409.</p>
2344    LimitExceeded(String),
2345    /// <p>An exception for creating a resource that already exists. Gives http status code of 400.</p>
2346    ResourceAlreadyExists(String),
2347}
2348
2349impl CreateOutboundCrossClusterSearchConnectionError {
2350    pub fn from_response(
2351        res: BufferedHttpResponse,
2352    ) -> RusotoError<CreateOutboundCrossClusterSearchConnectionError> {
2353        if let Some(err) = proto::json::Error::parse_rest(&res) {
2354            match err.typ.as_str() {
2355                "DisabledOperationException" => {
2356                    return RusotoError::Service(
2357                        CreateOutboundCrossClusterSearchConnectionError::DisabledOperation(err.msg),
2358                    )
2359                }
2360                "InternalException" => {
2361                    return RusotoError::Service(
2362                        CreateOutboundCrossClusterSearchConnectionError::Internal(err.msg),
2363                    )
2364                }
2365                "LimitExceededException" => {
2366                    return RusotoError::Service(
2367                        CreateOutboundCrossClusterSearchConnectionError::LimitExceeded(err.msg),
2368                    )
2369                }
2370                "ResourceAlreadyExistsException" => {
2371                    return RusotoError::Service(
2372                        CreateOutboundCrossClusterSearchConnectionError::ResourceAlreadyExists(
2373                            err.msg,
2374                        ),
2375                    )
2376                }
2377                "ValidationException" => return RusotoError::Validation(err.msg),
2378                _ => {}
2379            }
2380        }
2381        RusotoError::Unknown(res)
2382    }
2383}
2384impl fmt::Display for CreateOutboundCrossClusterSearchConnectionError {
2385    #[allow(unused_variables)]
2386    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2387        match *self {
2388            CreateOutboundCrossClusterSearchConnectionError::DisabledOperation(ref cause) => {
2389                write!(f, "{}", cause)
2390            }
2391            CreateOutboundCrossClusterSearchConnectionError::Internal(ref cause) => {
2392                write!(f, "{}", cause)
2393            }
2394            CreateOutboundCrossClusterSearchConnectionError::LimitExceeded(ref cause) => {
2395                write!(f, "{}", cause)
2396            }
2397            CreateOutboundCrossClusterSearchConnectionError::ResourceAlreadyExists(ref cause) => {
2398                write!(f, "{}", cause)
2399            }
2400        }
2401    }
2402}
2403impl Error for CreateOutboundCrossClusterSearchConnectionError {}
2404/// Errors returned by CreatePackage
2405#[derive(Debug, PartialEq)]
2406pub enum CreatePackageError {
2407    /// <p>An error occurred because user does not have permissions to access the resource. Returns HTTP status code 403.</p>
2408    AccessDenied(String),
2409    /// <p>An error occurred while processing the request.</p>
2410    Base(String),
2411    /// <p>The request processing has failed because of an unknown error, exception or failure (the failure is internal to the service) . Gives http status code of 500.</p>
2412    Internal(String),
2413    /// <p>An exception for trying to create or access sub-resource that is either invalid or not supported. Gives http status code of 409.</p>
2414    InvalidType(String),
2415    /// <p>An exception for trying to create more than allowed resources or sub-resources. Gives http status code of 409.</p>
2416    LimitExceeded(String),
2417    /// <p>An exception for creating a resource that already exists. Gives http status code of 400.</p>
2418    ResourceAlreadyExists(String),
2419}
2420
2421impl CreatePackageError {
2422    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<CreatePackageError> {
2423        if let Some(err) = proto::json::Error::parse_rest(&res) {
2424            match err.typ.as_str() {
2425                "AccessDeniedException" => {
2426                    return RusotoError::Service(CreatePackageError::AccessDenied(err.msg))
2427                }
2428                "BaseException" => return RusotoError::Service(CreatePackageError::Base(err.msg)),
2429                "InternalException" => {
2430                    return RusotoError::Service(CreatePackageError::Internal(err.msg))
2431                }
2432                "InvalidTypeException" => {
2433                    return RusotoError::Service(CreatePackageError::InvalidType(err.msg))
2434                }
2435                "LimitExceededException" => {
2436                    return RusotoError::Service(CreatePackageError::LimitExceeded(err.msg))
2437                }
2438                "ResourceAlreadyExistsException" => {
2439                    return RusotoError::Service(CreatePackageError::ResourceAlreadyExists(err.msg))
2440                }
2441                "ValidationException" => return RusotoError::Validation(err.msg),
2442                _ => {}
2443            }
2444        }
2445        RusotoError::Unknown(res)
2446    }
2447}
2448impl fmt::Display for CreatePackageError {
2449    #[allow(unused_variables)]
2450    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2451        match *self {
2452            CreatePackageError::AccessDenied(ref cause) => write!(f, "{}", cause),
2453            CreatePackageError::Base(ref cause) => write!(f, "{}", cause),
2454            CreatePackageError::Internal(ref cause) => write!(f, "{}", cause),
2455            CreatePackageError::InvalidType(ref cause) => write!(f, "{}", cause),
2456            CreatePackageError::LimitExceeded(ref cause) => write!(f, "{}", cause),
2457            CreatePackageError::ResourceAlreadyExists(ref cause) => write!(f, "{}", cause),
2458        }
2459    }
2460}
2461impl Error for CreatePackageError {}
2462/// Errors returned by DeleteElasticsearchDomain
2463#[derive(Debug, PartialEq)]
2464pub enum DeleteElasticsearchDomainError {
2465    /// <p>An error occurred while processing the request.</p>
2466    Base(String),
2467    /// <p>The request processing has failed because of an unknown error, exception or failure (the failure is internal to the service) . Gives http status code of 500.</p>
2468    Internal(String),
2469    /// <p>An exception for accessing or deleting a resource that does not exist. Gives http status code of 400.</p>
2470    ResourceNotFound(String),
2471}
2472
2473impl DeleteElasticsearchDomainError {
2474    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteElasticsearchDomainError> {
2475        if let Some(err) = proto::json::Error::parse_rest(&res) {
2476            match err.typ.as_str() {
2477                "BaseException" => {
2478                    return RusotoError::Service(DeleteElasticsearchDomainError::Base(err.msg))
2479                }
2480                "InternalException" => {
2481                    return RusotoError::Service(DeleteElasticsearchDomainError::Internal(err.msg))
2482                }
2483                "ResourceNotFoundException" => {
2484                    return RusotoError::Service(DeleteElasticsearchDomainError::ResourceNotFound(
2485                        err.msg,
2486                    ))
2487                }
2488                "ValidationException" => return RusotoError::Validation(err.msg),
2489                _ => {}
2490            }
2491        }
2492        RusotoError::Unknown(res)
2493    }
2494}
2495impl fmt::Display for DeleteElasticsearchDomainError {
2496    #[allow(unused_variables)]
2497    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2498        match *self {
2499            DeleteElasticsearchDomainError::Base(ref cause) => write!(f, "{}", cause),
2500            DeleteElasticsearchDomainError::Internal(ref cause) => write!(f, "{}", cause),
2501            DeleteElasticsearchDomainError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
2502        }
2503    }
2504}
2505impl Error for DeleteElasticsearchDomainError {}
2506/// Errors returned by DeleteElasticsearchServiceRole
2507#[derive(Debug, PartialEq)]
2508pub enum DeleteElasticsearchServiceRoleError {
2509    /// <p>An error occurred while processing the request.</p>
2510    Base(String),
2511    /// <p>The request processing has failed because of an unknown error, exception or failure (the failure is internal to the service) . Gives http status code of 500.</p>
2512    Internal(String),
2513}
2514
2515impl DeleteElasticsearchServiceRoleError {
2516    pub fn from_response(
2517        res: BufferedHttpResponse,
2518    ) -> RusotoError<DeleteElasticsearchServiceRoleError> {
2519        if let Some(err) = proto::json::Error::parse_rest(&res) {
2520            match err.typ.as_str() {
2521                "BaseException" => {
2522                    return RusotoError::Service(DeleteElasticsearchServiceRoleError::Base(err.msg))
2523                }
2524                "InternalException" => {
2525                    return RusotoError::Service(DeleteElasticsearchServiceRoleError::Internal(
2526                        err.msg,
2527                    ))
2528                }
2529                "ValidationException" => return RusotoError::Validation(err.msg),
2530                _ => {}
2531            }
2532        }
2533        RusotoError::Unknown(res)
2534    }
2535}
2536impl fmt::Display for DeleteElasticsearchServiceRoleError {
2537    #[allow(unused_variables)]
2538    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2539        match *self {
2540            DeleteElasticsearchServiceRoleError::Base(ref cause) => write!(f, "{}", cause),
2541            DeleteElasticsearchServiceRoleError::Internal(ref cause) => write!(f, "{}", cause),
2542        }
2543    }
2544}
2545impl Error for DeleteElasticsearchServiceRoleError {}
2546/// Errors returned by DeleteInboundCrossClusterSearchConnection
2547#[derive(Debug, PartialEq)]
2548pub enum DeleteInboundCrossClusterSearchConnectionError {
2549    /// <p>An error occured because the client wanted to access a not supported operation. Gives http status code of 409.</p>
2550    DisabledOperation(String),
2551    /// <p>An exception for accessing or deleting a resource that does not exist. Gives http status code of 400.</p>
2552    ResourceNotFound(String),
2553}
2554
2555impl DeleteInboundCrossClusterSearchConnectionError {
2556    pub fn from_response(
2557        res: BufferedHttpResponse,
2558    ) -> RusotoError<DeleteInboundCrossClusterSearchConnectionError> {
2559        if let Some(err) = proto::json::Error::parse_rest(&res) {
2560            match err.typ.as_str() {
2561                "DisabledOperationException" => {
2562                    return RusotoError::Service(
2563                        DeleteInboundCrossClusterSearchConnectionError::DisabledOperation(err.msg),
2564                    )
2565                }
2566                "ResourceNotFoundException" => {
2567                    return RusotoError::Service(
2568                        DeleteInboundCrossClusterSearchConnectionError::ResourceNotFound(err.msg),
2569                    )
2570                }
2571                "ValidationException" => return RusotoError::Validation(err.msg),
2572                _ => {}
2573            }
2574        }
2575        RusotoError::Unknown(res)
2576    }
2577}
2578impl fmt::Display for DeleteInboundCrossClusterSearchConnectionError {
2579    #[allow(unused_variables)]
2580    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2581        match *self {
2582            DeleteInboundCrossClusterSearchConnectionError::DisabledOperation(ref cause) => {
2583                write!(f, "{}", cause)
2584            }
2585            DeleteInboundCrossClusterSearchConnectionError::ResourceNotFound(ref cause) => {
2586                write!(f, "{}", cause)
2587            }
2588        }
2589    }
2590}
2591impl Error for DeleteInboundCrossClusterSearchConnectionError {}
2592/// Errors returned by DeleteOutboundCrossClusterSearchConnection
2593#[derive(Debug, PartialEq)]
2594pub enum DeleteOutboundCrossClusterSearchConnectionError {
2595    /// <p>An error occured because the client wanted to access a not supported operation. Gives http status code of 409.</p>
2596    DisabledOperation(String),
2597    /// <p>An exception for accessing or deleting a resource that does not exist. Gives http status code of 400.</p>
2598    ResourceNotFound(String),
2599}
2600
2601impl DeleteOutboundCrossClusterSearchConnectionError {
2602    pub fn from_response(
2603        res: BufferedHttpResponse,
2604    ) -> RusotoError<DeleteOutboundCrossClusterSearchConnectionError> {
2605        if let Some(err) = proto::json::Error::parse_rest(&res) {
2606            match err.typ.as_str() {
2607                "DisabledOperationException" => {
2608                    return RusotoError::Service(
2609                        DeleteOutboundCrossClusterSearchConnectionError::DisabledOperation(err.msg),
2610                    )
2611                }
2612                "ResourceNotFoundException" => {
2613                    return RusotoError::Service(
2614                        DeleteOutboundCrossClusterSearchConnectionError::ResourceNotFound(err.msg),
2615                    )
2616                }
2617                "ValidationException" => return RusotoError::Validation(err.msg),
2618                _ => {}
2619            }
2620        }
2621        RusotoError::Unknown(res)
2622    }
2623}
2624impl fmt::Display for DeleteOutboundCrossClusterSearchConnectionError {
2625    #[allow(unused_variables)]
2626    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2627        match *self {
2628            DeleteOutboundCrossClusterSearchConnectionError::DisabledOperation(ref cause) => {
2629                write!(f, "{}", cause)
2630            }
2631            DeleteOutboundCrossClusterSearchConnectionError::ResourceNotFound(ref cause) => {
2632                write!(f, "{}", cause)
2633            }
2634        }
2635    }
2636}
2637impl Error for DeleteOutboundCrossClusterSearchConnectionError {}
2638/// Errors returned by DeletePackage
2639#[derive(Debug, PartialEq)]
2640pub enum DeletePackageError {
2641    /// <p>An error occurred because user does not have permissions to access the resource. Returns HTTP status code 403.</p>
2642    AccessDenied(String),
2643    /// <p>An error occurred while processing the request.</p>
2644    Base(String),
2645    /// <p>An error occurred because the client attempts to remove a resource that is currently in use. Returns HTTP status code 409.</p>
2646    Conflict(String),
2647    /// <p>The request processing has failed because of an unknown error, exception or failure (the failure is internal to the service) . Gives http status code of 500.</p>
2648    Internal(String),
2649    /// <p>An exception for accessing or deleting a resource that does not exist. Gives http status code of 400.</p>
2650    ResourceNotFound(String),
2651}
2652
2653impl DeletePackageError {
2654    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeletePackageError> {
2655        if let Some(err) = proto::json::Error::parse_rest(&res) {
2656            match err.typ.as_str() {
2657                "AccessDeniedException" => {
2658                    return RusotoError::Service(DeletePackageError::AccessDenied(err.msg))
2659                }
2660                "BaseException" => return RusotoError::Service(DeletePackageError::Base(err.msg)),
2661                "ConflictException" => {
2662                    return RusotoError::Service(DeletePackageError::Conflict(err.msg))
2663                }
2664                "InternalException" => {
2665                    return RusotoError::Service(DeletePackageError::Internal(err.msg))
2666                }
2667                "ResourceNotFoundException" => {
2668                    return RusotoError::Service(DeletePackageError::ResourceNotFound(err.msg))
2669                }
2670                "ValidationException" => return RusotoError::Validation(err.msg),
2671                _ => {}
2672            }
2673        }
2674        RusotoError::Unknown(res)
2675    }
2676}
2677impl fmt::Display for DeletePackageError {
2678    #[allow(unused_variables)]
2679    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2680        match *self {
2681            DeletePackageError::AccessDenied(ref cause) => write!(f, "{}", cause),
2682            DeletePackageError::Base(ref cause) => write!(f, "{}", cause),
2683            DeletePackageError::Conflict(ref cause) => write!(f, "{}", cause),
2684            DeletePackageError::Internal(ref cause) => write!(f, "{}", cause),
2685            DeletePackageError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
2686        }
2687    }
2688}
2689impl Error for DeletePackageError {}
2690/// Errors returned by DescribeElasticsearchDomain
2691#[derive(Debug, PartialEq)]
2692pub enum DescribeElasticsearchDomainError {
2693    /// <p>An error occurred while processing the request.</p>
2694    Base(String),
2695    /// <p>The request processing has failed because of an unknown error, exception or failure (the failure is internal to the service) . Gives http status code of 500.</p>
2696    Internal(String),
2697    /// <p>An exception for accessing or deleting a resource that does not exist. Gives http status code of 400.</p>
2698    ResourceNotFound(String),
2699}
2700
2701impl DescribeElasticsearchDomainError {
2702    pub fn from_response(
2703        res: BufferedHttpResponse,
2704    ) -> RusotoError<DescribeElasticsearchDomainError> {
2705        if let Some(err) = proto::json::Error::parse_rest(&res) {
2706            match err.typ.as_str() {
2707                "BaseException" => {
2708                    return RusotoError::Service(DescribeElasticsearchDomainError::Base(err.msg))
2709                }
2710                "InternalException" => {
2711                    return RusotoError::Service(DescribeElasticsearchDomainError::Internal(
2712                        err.msg,
2713                    ))
2714                }
2715                "ResourceNotFoundException" => {
2716                    return RusotoError::Service(
2717                        DescribeElasticsearchDomainError::ResourceNotFound(err.msg),
2718                    )
2719                }
2720                "ValidationException" => return RusotoError::Validation(err.msg),
2721                _ => {}
2722            }
2723        }
2724        RusotoError::Unknown(res)
2725    }
2726}
2727impl fmt::Display for DescribeElasticsearchDomainError {
2728    #[allow(unused_variables)]
2729    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2730        match *self {
2731            DescribeElasticsearchDomainError::Base(ref cause) => write!(f, "{}", cause),
2732            DescribeElasticsearchDomainError::Internal(ref cause) => write!(f, "{}", cause),
2733            DescribeElasticsearchDomainError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
2734        }
2735    }
2736}
2737impl Error for DescribeElasticsearchDomainError {}
2738/// Errors returned by DescribeElasticsearchDomainConfig
2739#[derive(Debug, PartialEq)]
2740pub enum DescribeElasticsearchDomainConfigError {
2741    /// <p>An error occurred while processing the request.</p>
2742    Base(String),
2743    /// <p>The request processing has failed because of an unknown error, exception or failure (the failure is internal to the service) . Gives http status code of 500.</p>
2744    Internal(String),
2745    /// <p>An exception for accessing or deleting a resource that does not exist. Gives http status code of 400.</p>
2746    ResourceNotFound(String),
2747}
2748
2749impl DescribeElasticsearchDomainConfigError {
2750    pub fn from_response(
2751        res: BufferedHttpResponse,
2752    ) -> RusotoError<DescribeElasticsearchDomainConfigError> {
2753        if let Some(err) = proto::json::Error::parse_rest(&res) {
2754            match err.typ.as_str() {
2755                "BaseException" => {
2756                    return RusotoError::Service(DescribeElasticsearchDomainConfigError::Base(
2757                        err.msg,
2758                    ))
2759                }
2760                "InternalException" => {
2761                    return RusotoError::Service(DescribeElasticsearchDomainConfigError::Internal(
2762                        err.msg,
2763                    ))
2764                }
2765                "ResourceNotFoundException" => {
2766                    return RusotoError::Service(
2767                        DescribeElasticsearchDomainConfigError::ResourceNotFound(err.msg),
2768                    )
2769                }
2770                "ValidationException" => return RusotoError::Validation(err.msg),
2771                _ => {}
2772            }
2773        }
2774        RusotoError::Unknown(res)
2775    }
2776}
2777impl fmt::Display for DescribeElasticsearchDomainConfigError {
2778    #[allow(unused_variables)]
2779    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2780        match *self {
2781            DescribeElasticsearchDomainConfigError::Base(ref cause) => write!(f, "{}", cause),
2782            DescribeElasticsearchDomainConfigError::Internal(ref cause) => write!(f, "{}", cause),
2783            DescribeElasticsearchDomainConfigError::ResourceNotFound(ref cause) => {
2784                write!(f, "{}", cause)
2785            }
2786        }
2787    }
2788}
2789impl Error for DescribeElasticsearchDomainConfigError {}
2790/// Errors returned by DescribeElasticsearchDomains
2791#[derive(Debug, PartialEq)]
2792pub enum DescribeElasticsearchDomainsError {
2793    /// <p>An error occurred while processing the request.</p>
2794    Base(String),
2795    /// <p>The request processing has failed because of an unknown error, exception or failure (the failure is internal to the service) . Gives http status code of 500.</p>
2796    Internal(String),
2797}
2798
2799impl DescribeElasticsearchDomainsError {
2800    pub fn from_response(
2801        res: BufferedHttpResponse,
2802    ) -> RusotoError<DescribeElasticsearchDomainsError> {
2803        if let Some(err) = proto::json::Error::parse_rest(&res) {
2804            match err.typ.as_str() {
2805                "BaseException" => {
2806                    return RusotoError::Service(DescribeElasticsearchDomainsError::Base(err.msg))
2807                }
2808                "InternalException" => {
2809                    return RusotoError::Service(DescribeElasticsearchDomainsError::Internal(
2810                        err.msg,
2811                    ))
2812                }
2813                "ValidationException" => return RusotoError::Validation(err.msg),
2814                _ => {}
2815            }
2816        }
2817        RusotoError::Unknown(res)
2818    }
2819}
2820impl fmt::Display for DescribeElasticsearchDomainsError {
2821    #[allow(unused_variables)]
2822    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2823        match *self {
2824            DescribeElasticsearchDomainsError::Base(ref cause) => write!(f, "{}", cause),
2825            DescribeElasticsearchDomainsError::Internal(ref cause) => write!(f, "{}", cause),
2826        }
2827    }
2828}
2829impl Error for DescribeElasticsearchDomainsError {}
2830/// Errors returned by DescribeElasticsearchInstanceTypeLimits
2831#[derive(Debug, PartialEq)]
2832pub enum DescribeElasticsearchInstanceTypeLimitsError {
2833    /// <p>An error occurred while processing the request.</p>
2834    Base(String),
2835    /// <p>The request processing has failed because of an unknown error, exception or failure (the failure is internal to the service) . Gives http status code of 500.</p>
2836    Internal(String),
2837    /// <p>An exception for trying to create or access sub-resource that is either invalid or not supported. Gives http status code of 409.</p>
2838    InvalidType(String),
2839    /// <p>An exception for trying to create more than allowed resources or sub-resources. Gives http status code of 409.</p>
2840    LimitExceeded(String),
2841    /// <p>An exception for accessing or deleting a resource that does not exist. Gives http status code of 400.</p>
2842    ResourceNotFound(String),
2843}
2844
2845impl DescribeElasticsearchInstanceTypeLimitsError {
2846    pub fn from_response(
2847        res: BufferedHttpResponse,
2848    ) -> RusotoError<DescribeElasticsearchInstanceTypeLimitsError> {
2849        if let Some(err) = proto::json::Error::parse_rest(&res) {
2850            match err.typ.as_str() {
2851                "BaseException" => {
2852                    return RusotoError::Service(
2853                        DescribeElasticsearchInstanceTypeLimitsError::Base(err.msg),
2854                    )
2855                }
2856                "InternalException" => {
2857                    return RusotoError::Service(
2858                        DescribeElasticsearchInstanceTypeLimitsError::Internal(err.msg),
2859                    )
2860                }
2861                "InvalidTypeException" => {
2862                    return RusotoError::Service(
2863                        DescribeElasticsearchInstanceTypeLimitsError::InvalidType(err.msg),
2864                    )
2865                }
2866                "LimitExceededException" => {
2867                    return RusotoError::Service(
2868                        DescribeElasticsearchInstanceTypeLimitsError::LimitExceeded(err.msg),
2869                    )
2870                }
2871                "ResourceNotFoundException" => {
2872                    return RusotoError::Service(
2873                        DescribeElasticsearchInstanceTypeLimitsError::ResourceNotFound(err.msg),
2874                    )
2875                }
2876                "ValidationException" => return RusotoError::Validation(err.msg),
2877                _ => {}
2878            }
2879        }
2880        RusotoError::Unknown(res)
2881    }
2882}
2883impl fmt::Display for DescribeElasticsearchInstanceTypeLimitsError {
2884    #[allow(unused_variables)]
2885    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2886        match *self {
2887            DescribeElasticsearchInstanceTypeLimitsError::Base(ref cause) => write!(f, "{}", cause),
2888            DescribeElasticsearchInstanceTypeLimitsError::Internal(ref cause) => {
2889                write!(f, "{}", cause)
2890            }
2891            DescribeElasticsearchInstanceTypeLimitsError::InvalidType(ref cause) => {
2892                write!(f, "{}", cause)
2893            }
2894            DescribeElasticsearchInstanceTypeLimitsError::LimitExceeded(ref cause) => {
2895                write!(f, "{}", cause)
2896            }
2897            DescribeElasticsearchInstanceTypeLimitsError::ResourceNotFound(ref cause) => {
2898                write!(f, "{}", cause)
2899            }
2900        }
2901    }
2902}
2903impl Error for DescribeElasticsearchInstanceTypeLimitsError {}
2904/// Errors returned by DescribeInboundCrossClusterSearchConnections
2905#[derive(Debug, PartialEq)]
2906pub enum DescribeInboundCrossClusterSearchConnectionsError {
2907    /// <p>An error occured because the client wanted to access a not supported operation. Gives http status code of 409.</p>
2908    DisabledOperation(String),
2909    /// <p>The request processing has failed because of invalid pagination token provided by customer. Returns an HTTP status code of 400. </p>
2910    InvalidPaginationToken(String),
2911}
2912
2913impl DescribeInboundCrossClusterSearchConnectionsError {
2914    pub fn from_response(
2915        res: BufferedHttpResponse,
2916    ) -> RusotoError<DescribeInboundCrossClusterSearchConnectionsError> {
2917        if let Some(err) = proto::json::Error::parse_rest(&res) {
2918            match err.typ.as_str() {
2919                "DisabledOperationException" => {
2920                    return RusotoError::Service(
2921                        DescribeInboundCrossClusterSearchConnectionsError::DisabledOperation(
2922                            err.msg,
2923                        ),
2924                    )
2925                }
2926                "InvalidPaginationTokenException" => {
2927                    return RusotoError::Service(
2928                        DescribeInboundCrossClusterSearchConnectionsError::InvalidPaginationToken(
2929                            err.msg,
2930                        ),
2931                    )
2932                }
2933                "ValidationException" => return RusotoError::Validation(err.msg),
2934                _ => {}
2935            }
2936        }
2937        RusotoError::Unknown(res)
2938    }
2939}
2940impl fmt::Display for DescribeInboundCrossClusterSearchConnectionsError {
2941    #[allow(unused_variables)]
2942    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2943        match *self {
2944            DescribeInboundCrossClusterSearchConnectionsError::DisabledOperation(ref cause) => {
2945                write!(f, "{}", cause)
2946            }
2947            DescribeInboundCrossClusterSearchConnectionsError::InvalidPaginationToken(
2948                ref cause,
2949            ) => write!(f, "{}", cause),
2950        }
2951    }
2952}
2953impl Error for DescribeInboundCrossClusterSearchConnectionsError {}
2954/// Errors returned by DescribeOutboundCrossClusterSearchConnections
2955#[derive(Debug, PartialEq)]
2956pub enum DescribeOutboundCrossClusterSearchConnectionsError {
2957    /// <p>An error occured because the client wanted to access a not supported operation. Gives http status code of 409.</p>
2958    DisabledOperation(String),
2959    /// <p>The request processing has failed because of invalid pagination token provided by customer. Returns an HTTP status code of 400. </p>
2960    InvalidPaginationToken(String),
2961}
2962
2963impl DescribeOutboundCrossClusterSearchConnectionsError {
2964    pub fn from_response(
2965        res: BufferedHttpResponse,
2966    ) -> RusotoError<DescribeOutboundCrossClusterSearchConnectionsError> {
2967        if let Some(err) = proto::json::Error::parse_rest(&res) {
2968            match err.typ.as_str() {
2969                "DisabledOperationException" => {
2970                    return RusotoError::Service(
2971                        DescribeOutboundCrossClusterSearchConnectionsError::DisabledOperation(
2972                            err.msg,
2973                        ),
2974                    )
2975                }
2976                "InvalidPaginationTokenException" => {
2977                    return RusotoError::Service(
2978                        DescribeOutboundCrossClusterSearchConnectionsError::InvalidPaginationToken(
2979                            err.msg,
2980                        ),
2981                    )
2982                }
2983                "ValidationException" => return RusotoError::Validation(err.msg),
2984                _ => {}
2985            }
2986        }
2987        RusotoError::Unknown(res)
2988    }
2989}
2990impl fmt::Display for DescribeOutboundCrossClusterSearchConnectionsError {
2991    #[allow(unused_variables)]
2992    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2993        match *self {
2994            DescribeOutboundCrossClusterSearchConnectionsError::DisabledOperation(ref cause) => {
2995                write!(f, "{}", cause)
2996            }
2997            DescribeOutboundCrossClusterSearchConnectionsError::InvalidPaginationToken(
2998                ref cause,
2999            ) => write!(f, "{}", cause),
3000        }
3001    }
3002}
3003impl Error for DescribeOutboundCrossClusterSearchConnectionsError {}
3004/// Errors returned by DescribePackages
3005#[derive(Debug, PartialEq)]
3006pub enum DescribePackagesError {
3007    /// <p>An error occurred because user does not have permissions to access the resource. Returns HTTP status code 403.</p>
3008    AccessDenied(String),
3009    /// <p>An error occurred while processing the request.</p>
3010    Base(String),
3011    /// <p>The request processing has failed because of an unknown error, exception or failure (the failure is internal to the service) . Gives http status code of 500.</p>
3012    Internal(String),
3013    /// <p>An exception for accessing or deleting a resource that does not exist. Gives http status code of 400.</p>
3014    ResourceNotFound(String),
3015}
3016
3017impl DescribePackagesError {
3018    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DescribePackagesError> {
3019        if let Some(err) = proto::json::Error::parse_rest(&res) {
3020            match err.typ.as_str() {
3021                "AccessDeniedException" => {
3022                    return RusotoError::Service(DescribePackagesError::AccessDenied(err.msg))
3023                }
3024                "BaseException" => {
3025                    return RusotoError::Service(DescribePackagesError::Base(err.msg))
3026                }
3027                "InternalException" => {
3028                    return RusotoError::Service(DescribePackagesError::Internal(err.msg))
3029                }
3030                "ResourceNotFoundException" => {
3031                    return RusotoError::Service(DescribePackagesError::ResourceNotFound(err.msg))
3032                }
3033                "ValidationException" => return RusotoError::Validation(err.msg),
3034                _ => {}
3035            }
3036        }
3037        RusotoError::Unknown(res)
3038    }
3039}
3040impl fmt::Display for DescribePackagesError {
3041    #[allow(unused_variables)]
3042    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3043        match *self {
3044            DescribePackagesError::AccessDenied(ref cause) => write!(f, "{}", cause),
3045            DescribePackagesError::Base(ref cause) => write!(f, "{}", cause),
3046            DescribePackagesError::Internal(ref cause) => write!(f, "{}", cause),
3047            DescribePackagesError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
3048        }
3049    }
3050}
3051impl Error for DescribePackagesError {}
3052/// Errors returned by DescribeReservedElasticsearchInstanceOfferings
3053#[derive(Debug, PartialEq)]
3054pub enum DescribeReservedElasticsearchInstanceOfferingsError {
3055    /// <p>An error occured because the client wanted to access a not supported operation. Gives http status code of 409.</p>
3056    DisabledOperation(String),
3057    /// <p>The request processing has failed because of an unknown error, exception or failure (the failure is internal to the service) . Gives http status code of 500.</p>
3058    Internal(String),
3059    /// <p>An exception for accessing or deleting a resource that does not exist. Gives http status code of 400.</p>
3060    ResourceNotFound(String),
3061}
3062
3063impl DescribeReservedElasticsearchInstanceOfferingsError {
3064    pub fn from_response(
3065        res: BufferedHttpResponse,
3066    ) -> RusotoError<DescribeReservedElasticsearchInstanceOfferingsError> {
3067        if let Some(err) = proto::json::Error::parse_rest(&res) {
3068            match err.typ.as_str() {
3069                "DisabledOperationException" => {
3070                    return RusotoError::Service(
3071                        DescribeReservedElasticsearchInstanceOfferingsError::DisabledOperation(
3072                            err.msg,
3073                        ),
3074                    )
3075                }
3076                "InternalException" => {
3077                    return RusotoError::Service(
3078                        DescribeReservedElasticsearchInstanceOfferingsError::Internal(err.msg),
3079                    )
3080                }
3081                "ResourceNotFoundException" => {
3082                    return RusotoError::Service(
3083                        DescribeReservedElasticsearchInstanceOfferingsError::ResourceNotFound(
3084                            err.msg,
3085                        ),
3086                    )
3087                }
3088                "ValidationException" => return RusotoError::Validation(err.msg),
3089                _ => {}
3090            }
3091        }
3092        RusotoError::Unknown(res)
3093    }
3094}
3095impl fmt::Display for DescribeReservedElasticsearchInstanceOfferingsError {
3096    #[allow(unused_variables)]
3097    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3098        match *self {
3099            DescribeReservedElasticsearchInstanceOfferingsError::DisabledOperation(ref cause) => {
3100                write!(f, "{}", cause)
3101            }
3102            DescribeReservedElasticsearchInstanceOfferingsError::Internal(ref cause) => {
3103                write!(f, "{}", cause)
3104            }
3105            DescribeReservedElasticsearchInstanceOfferingsError::ResourceNotFound(ref cause) => {
3106                write!(f, "{}", cause)
3107            }
3108        }
3109    }
3110}
3111impl Error for DescribeReservedElasticsearchInstanceOfferingsError {}
3112/// Errors returned by DescribeReservedElasticsearchInstances
3113#[derive(Debug, PartialEq)]
3114pub enum DescribeReservedElasticsearchInstancesError {
3115    /// <p>An error occured because the client wanted to access a not supported operation. Gives http status code of 409.</p>
3116    DisabledOperation(String),
3117    /// <p>The request processing has failed because of an unknown error, exception or failure (the failure is internal to the service) . Gives http status code of 500.</p>
3118    Internal(String),
3119    /// <p>An exception for accessing or deleting a resource that does not exist. Gives http status code of 400.</p>
3120    ResourceNotFound(String),
3121}
3122
3123impl DescribeReservedElasticsearchInstancesError {
3124    pub fn from_response(
3125        res: BufferedHttpResponse,
3126    ) -> RusotoError<DescribeReservedElasticsearchInstancesError> {
3127        if let Some(err) = proto::json::Error::parse_rest(&res) {
3128            match err.typ.as_str() {
3129                "DisabledOperationException" => {
3130                    return RusotoError::Service(
3131                        DescribeReservedElasticsearchInstancesError::DisabledOperation(err.msg),
3132                    )
3133                }
3134                "InternalException" => {
3135                    return RusotoError::Service(
3136                        DescribeReservedElasticsearchInstancesError::Internal(err.msg),
3137                    )
3138                }
3139                "ResourceNotFoundException" => {
3140                    return RusotoError::Service(
3141                        DescribeReservedElasticsearchInstancesError::ResourceNotFound(err.msg),
3142                    )
3143                }
3144                "ValidationException" => return RusotoError::Validation(err.msg),
3145                _ => {}
3146            }
3147        }
3148        RusotoError::Unknown(res)
3149    }
3150}
3151impl fmt::Display for DescribeReservedElasticsearchInstancesError {
3152    #[allow(unused_variables)]
3153    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3154        match *self {
3155            DescribeReservedElasticsearchInstancesError::DisabledOperation(ref cause) => {
3156                write!(f, "{}", cause)
3157            }
3158            DescribeReservedElasticsearchInstancesError::Internal(ref cause) => {
3159                write!(f, "{}", cause)
3160            }
3161            DescribeReservedElasticsearchInstancesError::ResourceNotFound(ref cause) => {
3162                write!(f, "{}", cause)
3163            }
3164        }
3165    }
3166}
3167impl Error for DescribeReservedElasticsearchInstancesError {}
3168/// Errors returned by DissociatePackage
3169#[derive(Debug, PartialEq)]
3170pub enum DissociatePackageError {
3171    /// <p>An error occurred because user does not have permissions to access the resource. Returns HTTP status code 403.</p>
3172    AccessDenied(String),
3173    /// <p>An error occurred while processing the request.</p>
3174    Base(String),
3175    /// <p>An error occurred because the client attempts to remove a resource that is currently in use. Returns HTTP status code 409.</p>
3176    Conflict(String),
3177    /// <p>The request processing has failed because of an unknown error, exception or failure (the failure is internal to the service) . Gives http status code of 500.</p>
3178    Internal(String),
3179    /// <p>An exception for accessing or deleting a resource that does not exist. Gives http status code of 400.</p>
3180    ResourceNotFound(String),
3181}
3182
3183impl DissociatePackageError {
3184    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DissociatePackageError> {
3185        if let Some(err) = proto::json::Error::parse_rest(&res) {
3186            match err.typ.as_str() {
3187                "AccessDeniedException" => {
3188                    return RusotoError::Service(DissociatePackageError::AccessDenied(err.msg))
3189                }
3190                "BaseException" => {
3191                    return RusotoError::Service(DissociatePackageError::Base(err.msg))
3192                }
3193                "ConflictException" => {
3194                    return RusotoError::Service(DissociatePackageError::Conflict(err.msg))
3195                }
3196                "InternalException" => {
3197                    return RusotoError::Service(DissociatePackageError::Internal(err.msg))
3198                }
3199                "ResourceNotFoundException" => {
3200                    return RusotoError::Service(DissociatePackageError::ResourceNotFound(err.msg))
3201                }
3202                "ValidationException" => return RusotoError::Validation(err.msg),
3203                _ => {}
3204            }
3205        }
3206        RusotoError::Unknown(res)
3207    }
3208}
3209impl fmt::Display for DissociatePackageError {
3210    #[allow(unused_variables)]
3211    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3212        match *self {
3213            DissociatePackageError::AccessDenied(ref cause) => write!(f, "{}", cause),
3214            DissociatePackageError::Base(ref cause) => write!(f, "{}", cause),
3215            DissociatePackageError::Conflict(ref cause) => write!(f, "{}", cause),
3216            DissociatePackageError::Internal(ref cause) => write!(f, "{}", cause),
3217            DissociatePackageError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
3218        }
3219    }
3220}
3221impl Error for DissociatePackageError {}
3222/// Errors returned by GetCompatibleElasticsearchVersions
3223#[derive(Debug, PartialEq)]
3224pub enum GetCompatibleElasticsearchVersionsError {
3225    /// <p>An error occurred while processing the request.</p>
3226    Base(String),
3227    /// <p>An error occured because the client wanted to access a not supported operation. Gives http status code of 409.</p>
3228    DisabledOperation(String),
3229    /// <p>The request processing has failed because of an unknown error, exception or failure (the failure is internal to the service) . Gives http status code of 500.</p>
3230    Internal(String),
3231    /// <p>An exception for accessing or deleting a resource that does not exist. Gives http status code of 400.</p>
3232    ResourceNotFound(String),
3233}
3234
3235impl GetCompatibleElasticsearchVersionsError {
3236    pub fn from_response(
3237        res: BufferedHttpResponse,
3238    ) -> RusotoError<GetCompatibleElasticsearchVersionsError> {
3239        if let Some(err) = proto::json::Error::parse_rest(&res) {
3240            match err.typ.as_str() {
3241                "BaseException" => {
3242                    return RusotoError::Service(GetCompatibleElasticsearchVersionsError::Base(
3243                        err.msg,
3244                    ))
3245                }
3246                "DisabledOperationException" => {
3247                    return RusotoError::Service(
3248                        GetCompatibleElasticsearchVersionsError::DisabledOperation(err.msg),
3249                    )
3250                }
3251                "InternalException" => {
3252                    return RusotoError::Service(GetCompatibleElasticsearchVersionsError::Internal(
3253                        err.msg,
3254                    ))
3255                }
3256                "ResourceNotFoundException" => {
3257                    return RusotoError::Service(
3258                        GetCompatibleElasticsearchVersionsError::ResourceNotFound(err.msg),
3259                    )
3260                }
3261                "ValidationException" => return RusotoError::Validation(err.msg),
3262                _ => {}
3263            }
3264        }
3265        RusotoError::Unknown(res)
3266    }
3267}
3268impl fmt::Display for GetCompatibleElasticsearchVersionsError {
3269    #[allow(unused_variables)]
3270    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3271        match *self {
3272            GetCompatibleElasticsearchVersionsError::Base(ref cause) => write!(f, "{}", cause),
3273            GetCompatibleElasticsearchVersionsError::DisabledOperation(ref cause) => {
3274                write!(f, "{}", cause)
3275            }
3276            GetCompatibleElasticsearchVersionsError::Internal(ref cause) => write!(f, "{}", cause),
3277            GetCompatibleElasticsearchVersionsError::ResourceNotFound(ref cause) => {
3278                write!(f, "{}", cause)
3279            }
3280        }
3281    }
3282}
3283impl Error for GetCompatibleElasticsearchVersionsError {}
3284/// Errors returned by GetUpgradeHistory
3285#[derive(Debug, PartialEq)]
3286pub enum GetUpgradeHistoryError {
3287    /// <p>An error occurred while processing the request.</p>
3288    Base(String),
3289    /// <p>An error occured because the client wanted to access a not supported operation. Gives http status code of 409.</p>
3290    DisabledOperation(String),
3291    /// <p>The request processing has failed because of an unknown error, exception or failure (the failure is internal to the service) . Gives http status code of 500.</p>
3292    Internal(String),
3293    /// <p>An exception for accessing or deleting a resource that does not exist. Gives http status code of 400.</p>
3294    ResourceNotFound(String),
3295}
3296
3297impl GetUpgradeHistoryError {
3298    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetUpgradeHistoryError> {
3299        if let Some(err) = proto::json::Error::parse_rest(&res) {
3300            match err.typ.as_str() {
3301                "BaseException" => {
3302                    return RusotoError::Service(GetUpgradeHistoryError::Base(err.msg))
3303                }
3304                "DisabledOperationException" => {
3305                    return RusotoError::Service(GetUpgradeHistoryError::DisabledOperation(err.msg))
3306                }
3307                "InternalException" => {
3308                    return RusotoError::Service(GetUpgradeHistoryError::Internal(err.msg))
3309                }
3310                "ResourceNotFoundException" => {
3311                    return RusotoError::Service(GetUpgradeHistoryError::ResourceNotFound(err.msg))
3312                }
3313                "ValidationException" => return RusotoError::Validation(err.msg),
3314                _ => {}
3315            }
3316        }
3317        RusotoError::Unknown(res)
3318    }
3319}
3320impl fmt::Display for GetUpgradeHistoryError {
3321    #[allow(unused_variables)]
3322    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3323        match *self {
3324            GetUpgradeHistoryError::Base(ref cause) => write!(f, "{}", cause),
3325            GetUpgradeHistoryError::DisabledOperation(ref cause) => write!(f, "{}", cause),
3326            GetUpgradeHistoryError::Internal(ref cause) => write!(f, "{}", cause),
3327            GetUpgradeHistoryError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
3328        }
3329    }
3330}
3331impl Error for GetUpgradeHistoryError {}
3332/// Errors returned by GetUpgradeStatus
3333#[derive(Debug, PartialEq)]
3334pub enum GetUpgradeStatusError {
3335    /// <p>An error occurred while processing the request.</p>
3336    Base(String),
3337    /// <p>An error occured because the client wanted to access a not supported operation. Gives http status code of 409.</p>
3338    DisabledOperation(String),
3339    /// <p>The request processing has failed because of an unknown error, exception or failure (the failure is internal to the service) . Gives http status code of 500.</p>
3340    Internal(String),
3341    /// <p>An exception for accessing or deleting a resource that does not exist. Gives http status code of 400.</p>
3342    ResourceNotFound(String),
3343}
3344
3345impl GetUpgradeStatusError {
3346    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetUpgradeStatusError> {
3347        if let Some(err) = proto::json::Error::parse_rest(&res) {
3348            match err.typ.as_str() {
3349                "BaseException" => {
3350                    return RusotoError::Service(GetUpgradeStatusError::Base(err.msg))
3351                }
3352                "DisabledOperationException" => {
3353                    return RusotoError::Service(GetUpgradeStatusError::DisabledOperation(err.msg))
3354                }
3355                "InternalException" => {
3356                    return RusotoError::Service(GetUpgradeStatusError::Internal(err.msg))
3357                }
3358                "ResourceNotFoundException" => {
3359                    return RusotoError::Service(GetUpgradeStatusError::ResourceNotFound(err.msg))
3360                }
3361                "ValidationException" => return RusotoError::Validation(err.msg),
3362                _ => {}
3363            }
3364        }
3365        RusotoError::Unknown(res)
3366    }
3367}
3368impl fmt::Display for GetUpgradeStatusError {
3369    #[allow(unused_variables)]
3370    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3371        match *self {
3372            GetUpgradeStatusError::Base(ref cause) => write!(f, "{}", cause),
3373            GetUpgradeStatusError::DisabledOperation(ref cause) => write!(f, "{}", cause),
3374            GetUpgradeStatusError::Internal(ref cause) => write!(f, "{}", cause),
3375            GetUpgradeStatusError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
3376        }
3377    }
3378}
3379impl Error for GetUpgradeStatusError {}
3380/// Errors returned by ListDomainNames
3381#[derive(Debug, PartialEq)]
3382pub enum ListDomainNamesError {
3383    /// <p>An error occurred while processing the request.</p>
3384    Base(String),
3385}
3386
3387impl ListDomainNamesError {
3388    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListDomainNamesError> {
3389        if let Some(err) = proto::json::Error::parse_rest(&res) {
3390            match err.typ.as_str() {
3391                "BaseException" => {
3392                    return RusotoError::Service(ListDomainNamesError::Base(err.msg))
3393                }
3394                "ValidationException" => return RusotoError::Validation(err.msg),
3395                _ => {}
3396            }
3397        }
3398        RusotoError::Unknown(res)
3399    }
3400}
3401impl fmt::Display for ListDomainNamesError {
3402    #[allow(unused_variables)]
3403    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3404        match *self {
3405            ListDomainNamesError::Base(ref cause) => write!(f, "{}", cause),
3406        }
3407    }
3408}
3409impl Error for ListDomainNamesError {}
3410/// Errors returned by ListDomainsForPackage
3411#[derive(Debug, PartialEq)]
3412pub enum ListDomainsForPackageError {
3413    /// <p>An error occurred because user does not have permissions to access the resource. Returns HTTP status code 403.</p>
3414    AccessDenied(String),
3415    /// <p>An error occurred while processing the request.</p>
3416    Base(String),
3417    /// <p>The request processing has failed because of an unknown error, exception or failure (the failure is internal to the service) . Gives http status code of 500.</p>
3418    Internal(String),
3419    /// <p>An exception for accessing or deleting a resource that does not exist. Gives http status code of 400.</p>
3420    ResourceNotFound(String),
3421}
3422
3423impl ListDomainsForPackageError {
3424    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListDomainsForPackageError> {
3425        if let Some(err) = proto::json::Error::parse_rest(&res) {
3426            match err.typ.as_str() {
3427                "AccessDeniedException" => {
3428                    return RusotoError::Service(ListDomainsForPackageError::AccessDenied(err.msg))
3429                }
3430                "BaseException" => {
3431                    return RusotoError::Service(ListDomainsForPackageError::Base(err.msg))
3432                }
3433                "InternalException" => {
3434                    return RusotoError::Service(ListDomainsForPackageError::Internal(err.msg))
3435                }
3436                "ResourceNotFoundException" => {
3437                    return RusotoError::Service(ListDomainsForPackageError::ResourceNotFound(
3438                        err.msg,
3439                    ))
3440                }
3441                "ValidationException" => return RusotoError::Validation(err.msg),
3442                _ => {}
3443            }
3444        }
3445        RusotoError::Unknown(res)
3446    }
3447}
3448impl fmt::Display for ListDomainsForPackageError {
3449    #[allow(unused_variables)]
3450    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3451        match *self {
3452            ListDomainsForPackageError::AccessDenied(ref cause) => write!(f, "{}", cause),
3453            ListDomainsForPackageError::Base(ref cause) => write!(f, "{}", cause),
3454            ListDomainsForPackageError::Internal(ref cause) => write!(f, "{}", cause),
3455            ListDomainsForPackageError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
3456        }
3457    }
3458}
3459impl Error for ListDomainsForPackageError {}
3460/// Errors returned by ListElasticsearchInstanceTypes
3461#[derive(Debug, PartialEq)]
3462pub enum ListElasticsearchInstanceTypesError {
3463    /// <p>An error occurred while processing the request.</p>
3464    Base(String),
3465    /// <p>The request processing has failed because of an unknown error, exception or failure (the failure is internal to the service) . Gives http status code of 500.</p>
3466    Internal(String),
3467    /// <p>An exception for accessing or deleting a resource that does not exist. Gives http status code of 400.</p>
3468    ResourceNotFound(String),
3469}
3470
3471impl ListElasticsearchInstanceTypesError {
3472    pub fn from_response(
3473        res: BufferedHttpResponse,
3474    ) -> RusotoError<ListElasticsearchInstanceTypesError> {
3475        if let Some(err) = proto::json::Error::parse_rest(&res) {
3476            match err.typ.as_str() {
3477                "BaseException" => {
3478                    return RusotoError::Service(ListElasticsearchInstanceTypesError::Base(err.msg))
3479                }
3480                "InternalException" => {
3481                    return RusotoError::Service(ListElasticsearchInstanceTypesError::Internal(
3482                        err.msg,
3483                    ))
3484                }
3485                "ResourceNotFoundException" => {
3486                    return RusotoError::Service(
3487                        ListElasticsearchInstanceTypesError::ResourceNotFound(err.msg),
3488                    )
3489                }
3490                "ValidationException" => return RusotoError::Validation(err.msg),
3491                _ => {}
3492            }
3493        }
3494        RusotoError::Unknown(res)
3495    }
3496}
3497impl fmt::Display for ListElasticsearchInstanceTypesError {
3498    #[allow(unused_variables)]
3499    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3500        match *self {
3501            ListElasticsearchInstanceTypesError::Base(ref cause) => write!(f, "{}", cause),
3502            ListElasticsearchInstanceTypesError::Internal(ref cause) => write!(f, "{}", cause),
3503            ListElasticsearchInstanceTypesError::ResourceNotFound(ref cause) => {
3504                write!(f, "{}", cause)
3505            }
3506        }
3507    }
3508}
3509impl Error for ListElasticsearchInstanceTypesError {}
3510/// Errors returned by ListElasticsearchVersions
3511#[derive(Debug, PartialEq)]
3512pub enum ListElasticsearchVersionsError {
3513    /// <p>An error occurred while processing the request.</p>
3514    Base(String),
3515    /// <p>The request processing has failed because of an unknown error, exception or failure (the failure is internal to the service) . Gives http status code of 500.</p>
3516    Internal(String),
3517    /// <p>An exception for accessing or deleting a resource that does not exist. Gives http status code of 400.</p>
3518    ResourceNotFound(String),
3519}
3520
3521impl ListElasticsearchVersionsError {
3522    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListElasticsearchVersionsError> {
3523        if let Some(err) = proto::json::Error::parse_rest(&res) {
3524            match err.typ.as_str() {
3525                "BaseException" => {
3526                    return RusotoError::Service(ListElasticsearchVersionsError::Base(err.msg))
3527                }
3528                "InternalException" => {
3529                    return RusotoError::Service(ListElasticsearchVersionsError::Internal(err.msg))
3530                }
3531                "ResourceNotFoundException" => {
3532                    return RusotoError::Service(ListElasticsearchVersionsError::ResourceNotFound(
3533                        err.msg,
3534                    ))
3535                }
3536                "ValidationException" => return RusotoError::Validation(err.msg),
3537                _ => {}
3538            }
3539        }
3540        RusotoError::Unknown(res)
3541    }
3542}
3543impl fmt::Display for ListElasticsearchVersionsError {
3544    #[allow(unused_variables)]
3545    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3546        match *self {
3547            ListElasticsearchVersionsError::Base(ref cause) => write!(f, "{}", cause),
3548            ListElasticsearchVersionsError::Internal(ref cause) => write!(f, "{}", cause),
3549            ListElasticsearchVersionsError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
3550        }
3551    }
3552}
3553impl Error for ListElasticsearchVersionsError {}
3554/// Errors returned by ListPackagesForDomain
3555#[derive(Debug, PartialEq)]
3556pub enum ListPackagesForDomainError {
3557    /// <p>An error occurred because user does not have permissions to access the resource. Returns HTTP status code 403.</p>
3558    AccessDenied(String),
3559    /// <p>An error occurred while processing the request.</p>
3560    Base(String),
3561    /// <p>The request processing has failed because of an unknown error, exception or failure (the failure is internal to the service) . Gives http status code of 500.</p>
3562    Internal(String),
3563    /// <p>An exception for accessing or deleting a resource that does not exist. Gives http status code of 400.</p>
3564    ResourceNotFound(String),
3565}
3566
3567impl ListPackagesForDomainError {
3568    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListPackagesForDomainError> {
3569        if let Some(err) = proto::json::Error::parse_rest(&res) {
3570            match err.typ.as_str() {
3571                "AccessDeniedException" => {
3572                    return RusotoError::Service(ListPackagesForDomainError::AccessDenied(err.msg))
3573                }
3574                "BaseException" => {
3575                    return RusotoError::Service(ListPackagesForDomainError::Base(err.msg))
3576                }
3577                "InternalException" => {
3578                    return RusotoError::Service(ListPackagesForDomainError::Internal(err.msg))
3579                }
3580                "ResourceNotFoundException" => {
3581                    return RusotoError::Service(ListPackagesForDomainError::ResourceNotFound(
3582                        err.msg,
3583                    ))
3584                }
3585                "ValidationException" => return RusotoError::Validation(err.msg),
3586                _ => {}
3587            }
3588        }
3589        RusotoError::Unknown(res)
3590    }
3591}
3592impl fmt::Display for ListPackagesForDomainError {
3593    #[allow(unused_variables)]
3594    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3595        match *self {
3596            ListPackagesForDomainError::AccessDenied(ref cause) => write!(f, "{}", cause),
3597            ListPackagesForDomainError::Base(ref cause) => write!(f, "{}", cause),
3598            ListPackagesForDomainError::Internal(ref cause) => write!(f, "{}", cause),
3599            ListPackagesForDomainError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
3600        }
3601    }
3602}
3603impl Error for ListPackagesForDomainError {}
3604/// Errors returned by ListTags
3605#[derive(Debug, PartialEq)]
3606pub enum ListTagsError {
3607    /// <p>An error occurred while processing the request.</p>
3608    Base(String),
3609    /// <p>The request processing has failed because of an unknown error, exception or failure (the failure is internal to the service) . Gives http status code of 500.</p>
3610    Internal(String),
3611    /// <p>An exception for accessing or deleting a resource that does not exist. Gives http status code of 400.</p>
3612    ResourceNotFound(String),
3613}
3614
3615impl ListTagsError {
3616    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListTagsError> {
3617        if let Some(err) = proto::json::Error::parse_rest(&res) {
3618            match err.typ.as_str() {
3619                "BaseException" => return RusotoError::Service(ListTagsError::Base(err.msg)),
3620                "InternalException" => {
3621                    return RusotoError::Service(ListTagsError::Internal(err.msg))
3622                }
3623                "ResourceNotFoundException" => {
3624                    return RusotoError::Service(ListTagsError::ResourceNotFound(err.msg))
3625                }
3626                "ValidationException" => return RusotoError::Validation(err.msg),
3627                _ => {}
3628            }
3629        }
3630        RusotoError::Unknown(res)
3631    }
3632}
3633impl fmt::Display for ListTagsError {
3634    #[allow(unused_variables)]
3635    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3636        match *self {
3637            ListTagsError::Base(ref cause) => write!(f, "{}", cause),
3638            ListTagsError::Internal(ref cause) => write!(f, "{}", cause),
3639            ListTagsError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
3640        }
3641    }
3642}
3643impl Error for ListTagsError {}
3644/// Errors returned by PurchaseReservedElasticsearchInstanceOffering
3645#[derive(Debug, PartialEq)]
3646pub enum PurchaseReservedElasticsearchInstanceOfferingError {
3647    /// <p>An error occured because the client wanted to access a not supported operation. Gives http status code of 409.</p>
3648    DisabledOperation(String),
3649    /// <p>The request processing has failed because of an unknown error, exception or failure (the failure is internal to the service) . Gives http status code of 500.</p>
3650    Internal(String),
3651    /// <p>An exception for trying to create more than allowed resources or sub-resources. Gives http status code of 409.</p>
3652    LimitExceeded(String),
3653    /// <p>An exception for creating a resource that already exists. Gives http status code of 400.</p>
3654    ResourceAlreadyExists(String),
3655    /// <p>An exception for accessing or deleting a resource that does not exist. Gives http status code of 400.</p>
3656    ResourceNotFound(String),
3657}
3658
3659impl PurchaseReservedElasticsearchInstanceOfferingError {
3660    pub fn from_response(
3661        res: BufferedHttpResponse,
3662    ) -> RusotoError<PurchaseReservedElasticsearchInstanceOfferingError> {
3663        if let Some(err) = proto::json::Error::parse_rest(&res) {
3664            match err.typ.as_str() {
3665                "DisabledOperationException" => {
3666                    return RusotoError::Service(
3667                        PurchaseReservedElasticsearchInstanceOfferingError::DisabledOperation(
3668                            err.msg,
3669                        ),
3670                    )
3671                }
3672                "InternalException" => {
3673                    return RusotoError::Service(
3674                        PurchaseReservedElasticsearchInstanceOfferingError::Internal(err.msg),
3675                    )
3676                }
3677                "LimitExceededException" => {
3678                    return RusotoError::Service(
3679                        PurchaseReservedElasticsearchInstanceOfferingError::LimitExceeded(err.msg),
3680                    )
3681                }
3682                "ResourceAlreadyExistsException" => {
3683                    return RusotoError::Service(
3684                        PurchaseReservedElasticsearchInstanceOfferingError::ResourceAlreadyExists(
3685                            err.msg,
3686                        ),
3687                    )
3688                }
3689                "ResourceNotFoundException" => {
3690                    return RusotoError::Service(
3691                        PurchaseReservedElasticsearchInstanceOfferingError::ResourceNotFound(
3692                            err.msg,
3693                        ),
3694                    )
3695                }
3696                "ValidationException" => return RusotoError::Validation(err.msg),
3697                _ => {}
3698            }
3699        }
3700        RusotoError::Unknown(res)
3701    }
3702}
3703impl fmt::Display for PurchaseReservedElasticsearchInstanceOfferingError {
3704    #[allow(unused_variables)]
3705    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3706        match *self {
3707            PurchaseReservedElasticsearchInstanceOfferingError::DisabledOperation(ref cause) => {
3708                write!(f, "{}", cause)
3709            }
3710            PurchaseReservedElasticsearchInstanceOfferingError::Internal(ref cause) => {
3711                write!(f, "{}", cause)
3712            }
3713            PurchaseReservedElasticsearchInstanceOfferingError::LimitExceeded(ref cause) => {
3714                write!(f, "{}", cause)
3715            }
3716            PurchaseReservedElasticsearchInstanceOfferingError::ResourceAlreadyExists(
3717                ref cause,
3718            ) => write!(f, "{}", cause),
3719            PurchaseReservedElasticsearchInstanceOfferingError::ResourceNotFound(ref cause) => {
3720                write!(f, "{}", cause)
3721            }
3722        }
3723    }
3724}
3725impl Error for PurchaseReservedElasticsearchInstanceOfferingError {}
3726/// Errors returned by RejectInboundCrossClusterSearchConnection
3727#[derive(Debug, PartialEq)]
3728pub enum RejectInboundCrossClusterSearchConnectionError {
3729    /// <p>An error occured because the client wanted to access a not supported operation. Gives http status code of 409.</p>
3730    DisabledOperation(String),
3731    /// <p>An exception for accessing or deleting a resource that does not exist. Gives http status code of 400.</p>
3732    ResourceNotFound(String),
3733}
3734
3735impl RejectInboundCrossClusterSearchConnectionError {
3736    pub fn from_response(
3737        res: BufferedHttpResponse,
3738    ) -> RusotoError<RejectInboundCrossClusterSearchConnectionError> {
3739        if let Some(err) = proto::json::Error::parse_rest(&res) {
3740            match err.typ.as_str() {
3741                "DisabledOperationException" => {
3742                    return RusotoError::Service(
3743                        RejectInboundCrossClusterSearchConnectionError::DisabledOperation(err.msg),
3744                    )
3745                }
3746                "ResourceNotFoundException" => {
3747                    return RusotoError::Service(
3748                        RejectInboundCrossClusterSearchConnectionError::ResourceNotFound(err.msg),
3749                    )
3750                }
3751                "ValidationException" => return RusotoError::Validation(err.msg),
3752                _ => {}
3753            }
3754        }
3755        RusotoError::Unknown(res)
3756    }
3757}
3758impl fmt::Display for RejectInboundCrossClusterSearchConnectionError {
3759    #[allow(unused_variables)]
3760    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3761        match *self {
3762            RejectInboundCrossClusterSearchConnectionError::DisabledOperation(ref cause) => {
3763                write!(f, "{}", cause)
3764            }
3765            RejectInboundCrossClusterSearchConnectionError::ResourceNotFound(ref cause) => {
3766                write!(f, "{}", cause)
3767            }
3768        }
3769    }
3770}
3771impl Error for RejectInboundCrossClusterSearchConnectionError {}
3772/// Errors returned by RemoveTags
3773#[derive(Debug, PartialEq)]
3774pub enum RemoveTagsError {
3775    /// <p>An error occurred while processing the request.</p>
3776    Base(String),
3777    /// <p>The request processing has failed because of an unknown error, exception or failure (the failure is internal to the service) . Gives http status code of 500.</p>
3778    Internal(String),
3779}
3780
3781impl RemoveTagsError {
3782    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<RemoveTagsError> {
3783        if let Some(err) = proto::json::Error::parse_rest(&res) {
3784            match err.typ.as_str() {
3785                "BaseException" => return RusotoError::Service(RemoveTagsError::Base(err.msg)),
3786                "InternalException" => {
3787                    return RusotoError::Service(RemoveTagsError::Internal(err.msg))
3788                }
3789                "ValidationException" => return RusotoError::Validation(err.msg),
3790                _ => {}
3791            }
3792        }
3793        RusotoError::Unknown(res)
3794    }
3795}
3796impl fmt::Display for RemoveTagsError {
3797    #[allow(unused_variables)]
3798    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3799        match *self {
3800            RemoveTagsError::Base(ref cause) => write!(f, "{}", cause),
3801            RemoveTagsError::Internal(ref cause) => write!(f, "{}", cause),
3802        }
3803    }
3804}
3805impl Error for RemoveTagsError {}
3806/// Errors returned by StartElasticsearchServiceSoftwareUpdate
3807#[derive(Debug, PartialEq)]
3808pub enum StartElasticsearchServiceSoftwareUpdateError {
3809    /// <p>An error occurred while processing the request.</p>
3810    Base(String),
3811    /// <p>The request processing has failed because of an unknown error, exception or failure (the failure is internal to the service) . Gives http status code of 500.</p>
3812    Internal(String),
3813    /// <p>An exception for accessing or deleting a resource that does not exist. Gives http status code of 400.</p>
3814    ResourceNotFound(String),
3815}
3816
3817impl StartElasticsearchServiceSoftwareUpdateError {
3818    pub fn from_response(
3819        res: BufferedHttpResponse,
3820    ) -> RusotoError<StartElasticsearchServiceSoftwareUpdateError> {
3821        if let Some(err) = proto::json::Error::parse_rest(&res) {
3822            match err.typ.as_str() {
3823                "BaseException" => {
3824                    return RusotoError::Service(
3825                        StartElasticsearchServiceSoftwareUpdateError::Base(err.msg),
3826                    )
3827                }
3828                "InternalException" => {
3829                    return RusotoError::Service(
3830                        StartElasticsearchServiceSoftwareUpdateError::Internal(err.msg),
3831                    )
3832                }
3833                "ResourceNotFoundException" => {
3834                    return RusotoError::Service(
3835                        StartElasticsearchServiceSoftwareUpdateError::ResourceNotFound(err.msg),
3836                    )
3837                }
3838                "ValidationException" => return RusotoError::Validation(err.msg),
3839                _ => {}
3840            }
3841        }
3842        RusotoError::Unknown(res)
3843    }
3844}
3845impl fmt::Display for StartElasticsearchServiceSoftwareUpdateError {
3846    #[allow(unused_variables)]
3847    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3848        match *self {
3849            StartElasticsearchServiceSoftwareUpdateError::Base(ref cause) => write!(f, "{}", cause),
3850            StartElasticsearchServiceSoftwareUpdateError::Internal(ref cause) => {
3851                write!(f, "{}", cause)
3852            }
3853            StartElasticsearchServiceSoftwareUpdateError::ResourceNotFound(ref cause) => {
3854                write!(f, "{}", cause)
3855            }
3856        }
3857    }
3858}
3859impl Error for StartElasticsearchServiceSoftwareUpdateError {}
3860/// Errors returned by UpdateElasticsearchDomainConfig
3861#[derive(Debug, PartialEq)]
3862pub enum UpdateElasticsearchDomainConfigError {
3863    /// <p>An error occurred while processing the request.</p>
3864    Base(String),
3865    /// <p>The request processing has failed because of an unknown error, exception or failure (the failure is internal to the service) . Gives http status code of 500.</p>
3866    Internal(String),
3867    /// <p>An exception for trying to create or access sub-resource that is either invalid or not supported. Gives http status code of 409.</p>
3868    InvalidType(String),
3869    /// <p>An exception for trying to create more than allowed resources or sub-resources. Gives http status code of 409.</p>
3870    LimitExceeded(String),
3871    /// <p>An exception for accessing or deleting a resource that does not exist. Gives http status code of 400.</p>
3872    ResourceNotFound(String),
3873}
3874
3875impl UpdateElasticsearchDomainConfigError {
3876    pub fn from_response(
3877        res: BufferedHttpResponse,
3878    ) -> RusotoError<UpdateElasticsearchDomainConfigError> {
3879        if let Some(err) = proto::json::Error::parse_rest(&res) {
3880            match err.typ.as_str() {
3881                "BaseException" => {
3882                    return RusotoError::Service(UpdateElasticsearchDomainConfigError::Base(
3883                        err.msg,
3884                    ))
3885                }
3886                "InternalException" => {
3887                    return RusotoError::Service(UpdateElasticsearchDomainConfigError::Internal(
3888                        err.msg,
3889                    ))
3890                }
3891                "InvalidTypeException" => {
3892                    return RusotoError::Service(UpdateElasticsearchDomainConfigError::InvalidType(
3893                        err.msg,
3894                    ))
3895                }
3896                "LimitExceededException" => {
3897                    return RusotoError::Service(
3898                        UpdateElasticsearchDomainConfigError::LimitExceeded(err.msg),
3899                    )
3900                }
3901                "ResourceNotFoundException" => {
3902                    return RusotoError::Service(
3903                        UpdateElasticsearchDomainConfigError::ResourceNotFound(err.msg),
3904                    )
3905                }
3906                "ValidationException" => return RusotoError::Validation(err.msg),
3907                _ => {}
3908            }
3909        }
3910        RusotoError::Unknown(res)
3911    }
3912}
3913impl fmt::Display for UpdateElasticsearchDomainConfigError {
3914    #[allow(unused_variables)]
3915    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3916        match *self {
3917            UpdateElasticsearchDomainConfigError::Base(ref cause) => write!(f, "{}", cause),
3918            UpdateElasticsearchDomainConfigError::Internal(ref cause) => write!(f, "{}", cause),
3919            UpdateElasticsearchDomainConfigError::InvalidType(ref cause) => write!(f, "{}", cause),
3920            UpdateElasticsearchDomainConfigError::LimitExceeded(ref cause) => {
3921                write!(f, "{}", cause)
3922            }
3923            UpdateElasticsearchDomainConfigError::ResourceNotFound(ref cause) => {
3924                write!(f, "{}", cause)
3925            }
3926        }
3927    }
3928}
3929impl Error for UpdateElasticsearchDomainConfigError {}
3930/// Errors returned by UpgradeElasticsearchDomain
3931#[derive(Debug, PartialEq)]
3932pub enum UpgradeElasticsearchDomainError {
3933    /// <p>An error occurred while processing the request.</p>
3934    Base(String),
3935    /// <p>An error occured because the client wanted to access a not supported operation. Gives http status code of 409.</p>
3936    DisabledOperation(String),
3937    /// <p>The request processing has failed because of an unknown error, exception or failure (the failure is internal to the service) . Gives http status code of 500.</p>
3938    Internal(String),
3939    /// <p>An exception for creating a resource that already exists. Gives http status code of 400.</p>
3940    ResourceAlreadyExists(String),
3941    /// <p>An exception for accessing or deleting a resource that does not exist. Gives http status code of 400.</p>
3942    ResourceNotFound(String),
3943}
3944
3945impl UpgradeElasticsearchDomainError {
3946    pub fn from_response(
3947        res: BufferedHttpResponse,
3948    ) -> RusotoError<UpgradeElasticsearchDomainError> {
3949        if let Some(err) = proto::json::Error::parse_rest(&res) {
3950            match err.typ.as_str() {
3951                "BaseException" => {
3952                    return RusotoError::Service(UpgradeElasticsearchDomainError::Base(err.msg))
3953                }
3954                "DisabledOperationException" => {
3955                    return RusotoError::Service(
3956                        UpgradeElasticsearchDomainError::DisabledOperation(err.msg),
3957                    )
3958                }
3959                "InternalException" => {
3960                    return RusotoError::Service(UpgradeElasticsearchDomainError::Internal(err.msg))
3961                }
3962                "ResourceAlreadyExistsException" => {
3963                    return RusotoError::Service(
3964                        UpgradeElasticsearchDomainError::ResourceAlreadyExists(err.msg),
3965                    )
3966                }
3967                "ResourceNotFoundException" => {
3968                    return RusotoError::Service(UpgradeElasticsearchDomainError::ResourceNotFound(
3969                        err.msg,
3970                    ))
3971                }
3972                "ValidationException" => return RusotoError::Validation(err.msg),
3973                _ => {}
3974            }
3975        }
3976        RusotoError::Unknown(res)
3977    }
3978}
3979impl fmt::Display for UpgradeElasticsearchDomainError {
3980    #[allow(unused_variables)]
3981    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3982        match *self {
3983            UpgradeElasticsearchDomainError::Base(ref cause) => write!(f, "{}", cause),
3984            UpgradeElasticsearchDomainError::DisabledOperation(ref cause) => write!(f, "{}", cause),
3985            UpgradeElasticsearchDomainError::Internal(ref cause) => write!(f, "{}", cause),
3986            UpgradeElasticsearchDomainError::ResourceAlreadyExists(ref cause) => {
3987                write!(f, "{}", cause)
3988            }
3989            UpgradeElasticsearchDomainError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
3990        }
3991    }
3992}
3993impl Error for UpgradeElasticsearchDomainError {}
3994/// Trait representing the capabilities of the Amazon Elasticsearch Service API. Amazon Elasticsearch Service clients implement this trait.
3995#[async_trait]
3996pub trait Es {
3997    /// <p>Allows the destination domain owner to accept an inbound cross-cluster search connection request.</p>
3998    async fn accept_inbound_cross_cluster_search_connection(
3999        &self,
4000        input: AcceptInboundCrossClusterSearchConnectionRequest,
4001    ) -> Result<
4002        AcceptInboundCrossClusterSearchConnectionResponse,
4003        RusotoError<AcceptInboundCrossClusterSearchConnectionError>,
4004    >;
4005
4006    /// <p>Attaches tags to an existing Elasticsearch domain. Tags are a set of case-sensitive key value pairs. An Elasticsearch domain may have up to 10 tags. See <a href="http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-managedomains.html#es-managedomains-awsresorcetagging" target="_blank"> Tagging Amazon Elasticsearch Service Domains for more information.</a></p>
4007    async fn add_tags(&self, input: AddTagsRequest) -> Result<(), RusotoError<AddTagsError>>;
4008
4009    /// <p>Associates a package with an Amazon ES domain.</p>
4010    async fn associate_package(
4011        &self,
4012        input: AssociatePackageRequest,
4013    ) -> Result<AssociatePackageResponse, RusotoError<AssociatePackageError>>;
4014
4015    /// <p>Cancels a scheduled service software update for an Amazon ES domain. You can only perform this operation before the <code>AutomatedUpdateDate</code> and when the <code>UpdateStatus</code> is in the <code>PENDING_UPDATE</code> state.</p>
4016    async fn cancel_elasticsearch_service_software_update(
4017        &self,
4018        input: CancelElasticsearchServiceSoftwareUpdateRequest,
4019    ) -> Result<
4020        CancelElasticsearchServiceSoftwareUpdateResponse,
4021        RusotoError<CancelElasticsearchServiceSoftwareUpdateError>,
4022    >;
4023
4024    /// <p>Creates a new Elasticsearch domain. For more information, see <a href="http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-createupdatedomains.html#es-createdomains" target="_blank">Creating Elasticsearch Domains</a> in the <i>Amazon Elasticsearch Service Developer Guide</i>.</p>
4025    async fn create_elasticsearch_domain(
4026        &self,
4027        input: CreateElasticsearchDomainRequest,
4028    ) -> Result<CreateElasticsearchDomainResponse, RusotoError<CreateElasticsearchDomainError>>;
4029
4030    /// <p>Creates a new cross-cluster search connection from a source domain to a destination domain.</p>
4031    async fn create_outbound_cross_cluster_search_connection(
4032        &self,
4033        input: CreateOutboundCrossClusterSearchConnectionRequest,
4034    ) -> Result<
4035        CreateOutboundCrossClusterSearchConnectionResponse,
4036        RusotoError<CreateOutboundCrossClusterSearchConnectionError>,
4037    >;
4038
4039    /// <p>Create a package for use with Amazon ES domains.</p>
4040    async fn create_package(
4041        &self,
4042        input: CreatePackageRequest,
4043    ) -> Result<CreatePackageResponse, RusotoError<CreatePackageError>>;
4044
4045    /// <p>Permanently deletes the specified Elasticsearch domain and all of its data. Once a domain is deleted, it cannot be recovered.</p>
4046    async fn delete_elasticsearch_domain(
4047        &self,
4048        input: DeleteElasticsearchDomainRequest,
4049    ) -> Result<DeleteElasticsearchDomainResponse, RusotoError<DeleteElasticsearchDomainError>>;
4050
4051    /// <p>Deletes the service-linked role that Elasticsearch Service uses to manage and maintain VPC domains. Role deletion will fail if any existing VPC domains use the role. You must delete any such Elasticsearch domains before deleting the role. See <a href="http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-vpc.html#es-enabling-slr" target="_blank">Deleting Elasticsearch Service Role</a> in <i>VPC Endpoints for Amazon Elasticsearch Service Domains</i>.</p>
4052    async fn delete_elasticsearch_service_role(
4053        &self,
4054    ) -> Result<(), RusotoError<DeleteElasticsearchServiceRoleError>>;
4055
4056    /// <p>Allows the destination domain owner to delete an existing inbound cross-cluster search connection.</p>
4057    async fn delete_inbound_cross_cluster_search_connection(
4058        &self,
4059        input: DeleteInboundCrossClusterSearchConnectionRequest,
4060    ) -> Result<
4061        DeleteInboundCrossClusterSearchConnectionResponse,
4062        RusotoError<DeleteInboundCrossClusterSearchConnectionError>,
4063    >;
4064
4065    /// <p>Allows the source domain owner to delete an existing outbound cross-cluster search connection.</p>
4066    async fn delete_outbound_cross_cluster_search_connection(
4067        &self,
4068        input: DeleteOutboundCrossClusterSearchConnectionRequest,
4069    ) -> Result<
4070        DeleteOutboundCrossClusterSearchConnectionResponse,
4071        RusotoError<DeleteOutboundCrossClusterSearchConnectionError>,
4072    >;
4073
4074    /// <p>Delete the package.</p>
4075    async fn delete_package(
4076        &self,
4077        input: DeletePackageRequest,
4078    ) -> Result<DeletePackageResponse, RusotoError<DeletePackageError>>;
4079
4080    /// <p>Returns domain configuration information about the specified Elasticsearch domain, including the domain ID, domain endpoint, and domain ARN.</p>
4081    async fn describe_elasticsearch_domain(
4082        &self,
4083        input: DescribeElasticsearchDomainRequest,
4084    ) -> Result<DescribeElasticsearchDomainResponse, RusotoError<DescribeElasticsearchDomainError>>;
4085
4086    /// <p>Provides cluster configuration information about the specified Elasticsearch domain, such as the state, creation date, update version, and update date for cluster options.</p>
4087    async fn describe_elasticsearch_domain_config(
4088        &self,
4089        input: DescribeElasticsearchDomainConfigRequest,
4090    ) -> Result<
4091        DescribeElasticsearchDomainConfigResponse,
4092        RusotoError<DescribeElasticsearchDomainConfigError>,
4093    >;
4094
4095    /// <p>Returns domain configuration information about the specified Elasticsearch domains, including the domain ID, domain endpoint, and domain ARN.</p>
4096    async fn describe_elasticsearch_domains(
4097        &self,
4098        input: DescribeElasticsearchDomainsRequest,
4099    ) -> Result<DescribeElasticsearchDomainsResponse, RusotoError<DescribeElasticsearchDomainsError>>;
4100
4101    /// <p> Describe Elasticsearch Limits for a given InstanceType and ElasticsearchVersion. When modifying existing Domain, specify the <code> <a>DomainName</a> </code> to know what Limits are supported for modifying. </p>
4102    async fn describe_elasticsearch_instance_type_limits(
4103        &self,
4104        input: DescribeElasticsearchInstanceTypeLimitsRequest,
4105    ) -> Result<
4106        DescribeElasticsearchInstanceTypeLimitsResponse,
4107        RusotoError<DescribeElasticsearchInstanceTypeLimitsError>,
4108    >;
4109
4110    /// <p>Lists all the inbound cross-cluster search connections for a destination domain.</p>
4111    async fn describe_inbound_cross_cluster_search_connections(
4112        &self,
4113        input: DescribeInboundCrossClusterSearchConnectionsRequest,
4114    ) -> Result<
4115        DescribeInboundCrossClusterSearchConnectionsResponse,
4116        RusotoError<DescribeInboundCrossClusterSearchConnectionsError>,
4117    >;
4118
4119    /// <p>Lists all the outbound cross-cluster search connections for a source domain.</p>
4120    async fn describe_outbound_cross_cluster_search_connections(
4121        &self,
4122        input: DescribeOutboundCrossClusterSearchConnectionsRequest,
4123    ) -> Result<
4124        DescribeOutboundCrossClusterSearchConnectionsResponse,
4125        RusotoError<DescribeOutboundCrossClusterSearchConnectionsError>,
4126    >;
4127
4128    /// <p>Describes all packages available to Amazon ES. Includes options for filtering, limiting the number of results, and pagination.</p>
4129    async fn describe_packages(
4130        &self,
4131        input: DescribePackagesRequest,
4132    ) -> Result<DescribePackagesResponse, RusotoError<DescribePackagesError>>;
4133
4134    /// <p>Lists available reserved Elasticsearch instance offerings.</p>
4135    async fn describe_reserved_elasticsearch_instance_offerings(
4136        &self,
4137        input: DescribeReservedElasticsearchInstanceOfferingsRequest,
4138    ) -> Result<
4139        DescribeReservedElasticsearchInstanceOfferingsResponse,
4140        RusotoError<DescribeReservedElasticsearchInstanceOfferingsError>,
4141    >;
4142
4143    /// <p>Returns information about reserved Elasticsearch instances for this account.</p>
4144    async fn describe_reserved_elasticsearch_instances(
4145        &self,
4146        input: DescribeReservedElasticsearchInstancesRequest,
4147    ) -> Result<
4148        DescribeReservedElasticsearchInstancesResponse,
4149        RusotoError<DescribeReservedElasticsearchInstancesError>,
4150    >;
4151
4152    /// <p>Dissociates a package from the Amazon ES domain.</p>
4153    async fn dissociate_package(
4154        &self,
4155        input: DissociatePackageRequest,
4156    ) -> Result<DissociatePackageResponse, RusotoError<DissociatePackageError>>;
4157
4158    /// <p> Returns a list of upgrade compatible Elastisearch versions. You can optionally pass a <code> <a>DomainName</a> </code> to get all upgrade compatible Elasticsearch versions for that specific domain. </p>
4159    async fn get_compatible_elasticsearch_versions(
4160        &self,
4161        input: GetCompatibleElasticsearchVersionsRequest,
4162    ) -> Result<
4163        GetCompatibleElasticsearchVersionsResponse,
4164        RusotoError<GetCompatibleElasticsearchVersionsError>,
4165    >;
4166
4167    /// <p>Retrieves the complete history of the last 10 upgrades that were performed on the domain.</p>
4168    async fn get_upgrade_history(
4169        &self,
4170        input: GetUpgradeHistoryRequest,
4171    ) -> Result<GetUpgradeHistoryResponse, RusotoError<GetUpgradeHistoryError>>;
4172
4173    /// <p>Retrieves the latest status of the last upgrade or upgrade eligibility check that was performed on the domain.</p>
4174    async fn get_upgrade_status(
4175        &self,
4176        input: GetUpgradeStatusRequest,
4177    ) -> Result<GetUpgradeStatusResponse, RusotoError<GetUpgradeStatusError>>;
4178
4179    /// <p>Returns the name of all Elasticsearch domains owned by the current user's account. </p>
4180    async fn list_domain_names(
4181        &self,
4182    ) -> Result<ListDomainNamesResponse, RusotoError<ListDomainNamesError>>;
4183
4184    /// <p>Lists all Amazon ES domains associated with the package.</p>
4185    async fn list_domains_for_package(
4186        &self,
4187        input: ListDomainsForPackageRequest,
4188    ) -> Result<ListDomainsForPackageResponse, RusotoError<ListDomainsForPackageError>>;
4189
4190    /// <p>List all Elasticsearch instance types that are supported for given ElasticsearchVersion</p>
4191    async fn list_elasticsearch_instance_types(
4192        &self,
4193        input: ListElasticsearchInstanceTypesRequest,
4194    ) -> Result<
4195        ListElasticsearchInstanceTypesResponse,
4196        RusotoError<ListElasticsearchInstanceTypesError>,
4197    >;
4198
4199    /// <p>List all supported Elasticsearch versions</p>
4200    async fn list_elasticsearch_versions(
4201        &self,
4202        input: ListElasticsearchVersionsRequest,
4203    ) -> Result<ListElasticsearchVersionsResponse, RusotoError<ListElasticsearchVersionsError>>;
4204
4205    /// <p>Lists all packages associated with the Amazon ES domain.</p>
4206    async fn list_packages_for_domain(
4207        &self,
4208        input: ListPackagesForDomainRequest,
4209    ) -> Result<ListPackagesForDomainResponse, RusotoError<ListPackagesForDomainError>>;
4210
4211    /// <p>Returns all tags for the given Elasticsearch domain.</p>
4212    async fn list_tags(
4213        &self,
4214        input: ListTagsRequest,
4215    ) -> Result<ListTagsResponse, RusotoError<ListTagsError>>;
4216
4217    /// <p>Allows you to purchase reserved Elasticsearch instances.</p>
4218    async fn purchase_reserved_elasticsearch_instance_offering(
4219        &self,
4220        input: PurchaseReservedElasticsearchInstanceOfferingRequest,
4221    ) -> Result<
4222        PurchaseReservedElasticsearchInstanceOfferingResponse,
4223        RusotoError<PurchaseReservedElasticsearchInstanceOfferingError>,
4224    >;
4225
4226    /// <p>Allows the destination domain owner to reject an inbound cross-cluster search connection request.</p>
4227    async fn reject_inbound_cross_cluster_search_connection(
4228        &self,
4229        input: RejectInboundCrossClusterSearchConnectionRequest,
4230    ) -> Result<
4231        RejectInboundCrossClusterSearchConnectionResponse,
4232        RusotoError<RejectInboundCrossClusterSearchConnectionError>,
4233    >;
4234
4235    /// <p>Removes the specified set of tags from the specified Elasticsearch domain.</p>
4236    async fn remove_tags(
4237        &self,
4238        input: RemoveTagsRequest,
4239    ) -> Result<(), RusotoError<RemoveTagsError>>;
4240
4241    /// <p>Schedules a service software update for an Amazon ES domain.</p>
4242    async fn start_elasticsearch_service_software_update(
4243        &self,
4244        input: StartElasticsearchServiceSoftwareUpdateRequest,
4245    ) -> Result<
4246        StartElasticsearchServiceSoftwareUpdateResponse,
4247        RusotoError<StartElasticsearchServiceSoftwareUpdateError>,
4248    >;
4249
4250    /// <p>Modifies the cluster configuration of the specified Elasticsearch domain, setting as setting the instance type and the number of instances. </p>
4251    async fn update_elasticsearch_domain_config(
4252        &self,
4253        input: UpdateElasticsearchDomainConfigRequest,
4254    ) -> Result<
4255        UpdateElasticsearchDomainConfigResponse,
4256        RusotoError<UpdateElasticsearchDomainConfigError>,
4257    >;
4258
4259    /// <p>Allows you to either upgrade your domain or perform an Upgrade eligibility check to a compatible Elasticsearch version.</p>
4260    async fn upgrade_elasticsearch_domain(
4261        &self,
4262        input: UpgradeElasticsearchDomainRequest,
4263    ) -> Result<UpgradeElasticsearchDomainResponse, RusotoError<UpgradeElasticsearchDomainError>>;
4264}
4265/// A client for the Amazon Elasticsearch Service API.
4266#[derive(Clone)]
4267pub struct EsClient {
4268    client: Client,
4269    region: region::Region,
4270}
4271
4272impl EsClient {
4273    /// Creates a client backed by the default tokio event loop.
4274    ///
4275    /// The client will use the default credentials provider and tls client.
4276    pub fn new(region: region::Region) -> EsClient {
4277        EsClient {
4278            client: Client::shared(),
4279            region,
4280        }
4281    }
4282
4283    pub fn new_with<P, D>(
4284        request_dispatcher: D,
4285        credentials_provider: P,
4286        region: region::Region,
4287    ) -> EsClient
4288    where
4289        P: ProvideAwsCredentials + Send + Sync + 'static,
4290        D: DispatchSignedRequest + Send + Sync + 'static,
4291    {
4292        EsClient {
4293            client: Client::new_with(credentials_provider, request_dispatcher),
4294            region,
4295        }
4296    }
4297
4298    pub fn new_with_client(client: Client, region: region::Region) -> EsClient {
4299        EsClient { client, region }
4300    }
4301}
4302
4303#[async_trait]
4304impl Es for EsClient {
4305    /// <p>Allows the destination domain owner to accept an inbound cross-cluster search connection request.</p>
4306    #[allow(unused_mut)]
4307    async fn accept_inbound_cross_cluster_search_connection(
4308        &self,
4309        input: AcceptInboundCrossClusterSearchConnectionRequest,
4310    ) -> Result<
4311        AcceptInboundCrossClusterSearchConnectionResponse,
4312        RusotoError<AcceptInboundCrossClusterSearchConnectionError>,
4313    > {
4314        let request_uri = format!(
4315            "/2015-01-01/es/ccs/inboundConnection/{connection_id}/accept",
4316            connection_id = input.cross_cluster_search_connection_id
4317        );
4318
4319        let mut request = SignedRequest::new("PUT", "es", &self.region, &request_uri);
4320        request.set_content_type("application/x-amz-json-1.1".to_owned());
4321
4322        let mut response = self
4323            .client
4324            .sign_and_dispatch(request)
4325            .await
4326            .map_err(RusotoError::from)?;
4327        if response.status.is_success() {
4328            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4329            let result = proto::json::ResponsePayload::new(&response)
4330                .deserialize::<AcceptInboundCrossClusterSearchConnectionResponse, _>()?;
4331
4332            Ok(result)
4333        } else {
4334            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4335            Err(AcceptInboundCrossClusterSearchConnectionError::from_response(response))
4336        }
4337    }
4338
4339    /// <p>Attaches tags to an existing Elasticsearch domain. Tags are a set of case-sensitive key value pairs. An Elasticsearch domain may have up to 10 tags. See <a href="http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-managedomains.html#es-managedomains-awsresorcetagging" target="_blank"> Tagging Amazon Elasticsearch Service Domains for more information.</a></p>
4340    #[allow(unused_mut)]
4341    async fn add_tags(&self, input: AddTagsRequest) -> Result<(), RusotoError<AddTagsError>> {
4342        let request_uri = "/2015-01-01/tags";
4343
4344        let mut request = SignedRequest::new("POST", "es", &self.region, &request_uri);
4345        request.set_content_type("application/x-amz-json-1.1".to_owned());
4346
4347        let encoded = Some(serde_json::to_vec(&input).unwrap());
4348        request.set_payload(encoded);
4349
4350        let mut response = self
4351            .client
4352            .sign_and_dispatch(request)
4353            .await
4354            .map_err(RusotoError::from)?;
4355        if response.status.is_success() {
4356            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4357            let result = ::std::mem::drop(response);
4358
4359            Ok(result)
4360        } else {
4361            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4362            Err(AddTagsError::from_response(response))
4363        }
4364    }
4365
4366    /// <p>Associates a package with an Amazon ES domain.</p>
4367    #[allow(unused_mut)]
4368    async fn associate_package(
4369        &self,
4370        input: AssociatePackageRequest,
4371    ) -> Result<AssociatePackageResponse, RusotoError<AssociatePackageError>> {
4372        let request_uri = format!(
4373            "/2015-01-01/packages/associate/{package_id}/{domain_name}",
4374            domain_name = input.domain_name,
4375            package_id = input.package_id
4376        );
4377
4378        let mut request = SignedRequest::new("POST", "es", &self.region, &request_uri);
4379        request.set_content_type("application/x-amz-json-1.1".to_owned());
4380
4381        let mut response = self
4382            .client
4383            .sign_and_dispatch(request)
4384            .await
4385            .map_err(RusotoError::from)?;
4386        if response.status.is_success() {
4387            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4388            let result = proto::json::ResponsePayload::new(&response)
4389                .deserialize::<AssociatePackageResponse, _>()?;
4390
4391            Ok(result)
4392        } else {
4393            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4394            Err(AssociatePackageError::from_response(response))
4395        }
4396    }
4397
4398    /// <p>Cancels a scheduled service software update for an Amazon ES domain. You can only perform this operation before the <code>AutomatedUpdateDate</code> and when the <code>UpdateStatus</code> is in the <code>PENDING_UPDATE</code> state.</p>
4399    #[allow(unused_mut)]
4400    async fn cancel_elasticsearch_service_software_update(
4401        &self,
4402        input: CancelElasticsearchServiceSoftwareUpdateRequest,
4403    ) -> Result<
4404        CancelElasticsearchServiceSoftwareUpdateResponse,
4405        RusotoError<CancelElasticsearchServiceSoftwareUpdateError>,
4406    > {
4407        let request_uri = "/2015-01-01/es/serviceSoftwareUpdate/cancel";
4408
4409        let mut request = SignedRequest::new("POST", "es", &self.region, &request_uri);
4410        request.set_content_type("application/x-amz-json-1.1".to_owned());
4411
4412        let encoded = Some(serde_json::to_vec(&input).unwrap());
4413        request.set_payload(encoded);
4414
4415        let mut response = self
4416            .client
4417            .sign_and_dispatch(request)
4418            .await
4419            .map_err(RusotoError::from)?;
4420        if response.status.is_success() {
4421            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4422            let result = proto::json::ResponsePayload::new(&response)
4423                .deserialize::<CancelElasticsearchServiceSoftwareUpdateResponse, _>()?;
4424
4425            Ok(result)
4426        } else {
4427            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4428            Err(CancelElasticsearchServiceSoftwareUpdateError::from_response(response))
4429        }
4430    }
4431
4432    /// <p>Creates a new Elasticsearch domain. For more information, see <a href="http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-createupdatedomains.html#es-createdomains" target="_blank">Creating Elasticsearch Domains</a> in the <i>Amazon Elasticsearch Service Developer Guide</i>.</p>
4433    #[allow(unused_mut)]
4434    async fn create_elasticsearch_domain(
4435        &self,
4436        input: CreateElasticsearchDomainRequest,
4437    ) -> Result<CreateElasticsearchDomainResponse, RusotoError<CreateElasticsearchDomainError>>
4438    {
4439        let request_uri = "/2015-01-01/es/domain";
4440
4441        let mut request = SignedRequest::new("POST", "es", &self.region, &request_uri);
4442        request.set_content_type("application/x-amz-json-1.1".to_owned());
4443
4444        let encoded = Some(serde_json::to_vec(&input).unwrap());
4445        request.set_payload(encoded);
4446
4447        let mut response = self
4448            .client
4449            .sign_and_dispatch(request)
4450            .await
4451            .map_err(RusotoError::from)?;
4452        if response.status.is_success() {
4453            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4454            let result = proto::json::ResponsePayload::new(&response)
4455                .deserialize::<CreateElasticsearchDomainResponse, _>()?;
4456
4457            Ok(result)
4458        } else {
4459            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4460            Err(CreateElasticsearchDomainError::from_response(response))
4461        }
4462    }
4463
4464    /// <p>Creates a new cross-cluster search connection from a source domain to a destination domain.</p>
4465    #[allow(unused_mut)]
4466    async fn create_outbound_cross_cluster_search_connection(
4467        &self,
4468        input: CreateOutboundCrossClusterSearchConnectionRequest,
4469    ) -> Result<
4470        CreateOutboundCrossClusterSearchConnectionResponse,
4471        RusotoError<CreateOutboundCrossClusterSearchConnectionError>,
4472    > {
4473        let request_uri = "/2015-01-01/es/ccs/outboundConnection";
4474
4475        let mut request = SignedRequest::new("POST", "es", &self.region, &request_uri);
4476        request.set_content_type("application/x-amz-json-1.1".to_owned());
4477
4478        let encoded = Some(serde_json::to_vec(&input).unwrap());
4479        request.set_payload(encoded);
4480
4481        let mut response = self
4482            .client
4483            .sign_and_dispatch(request)
4484            .await
4485            .map_err(RusotoError::from)?;
4486        if response.status.is_success() {
4487            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4488            let result = proto::json::ResponsePayload::new(&response)
4489                .deserialize::<CreateOutboundCrossClusterSearchConnectionResponse, _>()?;
4490
4491            Ok(result)
4492        } else {
4493            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4494            Err(CreateOutboundCrossClusterSearchConnectionError::from_response(response))
4495        }
4496    }
4497
4498    /// <p>Create a package for use with Amazon ES domains.</p>
4499    #[allow(unused_mut)]
4500    async fn create_package(
4501        &self,
4502        input: CreatePackageRequest,
4503    ) -> Result<CreatePackageResponse, RusotoError<CreatePackageError>> {
4504        let request_uri = "/2015-01-01/packages";
4505
4506        let mut request = SignedRequest::new("POST", "es", &self.region, &request_uri);
4507        request.set_content_type("application/x-amz-json-1.1".to_owned());
4508
4509        let encoded = Some(serde_json::to_vec(&input).unwrap());
4510        request.set_payload(encoded);
4511
4512        let mut response = self
4513            .client
4514            .sign_and_dispatch(request)
4515            .await
4516            .map_err(RusotoError::from)?;
4517        if response.status.is_success() {
4518            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4519            let result = proto::json::ResponsePayload::new(&response)
4520                .deserialize::<CreatePackageResponse, _>()?;
4521
4522            Ok(result)
4523        } else {
4524            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4525            Err(CreatePackageError::from_response(response))
4526        }
4527    }
4528
4529    /// <p>Permanently deletes the specified Elasticsearch domain and all of its data. Once a domain is deleted, it cannot be recovered.</p>
4530    #[allow(unused_mut)]
4531    async fn delete_elasticsearch_domain(
4532        &self,
4533        input: DeleteElasticsearchDomainRequest,
4534    ) -> Result<DeleteElasticsearchDomainResponse, RusotoError<DeleteElasticsearchDomainError>>
4535    {
4536        let request_uri = format!(
4537            "/2015-01-01/es/domain/{domain_name}",
4538            domain_name = input.domain_name
4539        );
4540
4541        let mut request = SignedRequest::new("DELETE", "es", &self.region, &request_uri);
4542        request.set_content_type("application/x-amz-json-1.1".to_owned());
4543
4544        let mut response = self
4545            .client
4546            .sign_and_dispatch(request)
4547            .await
4548            .map_err(RusotoError::from)?;
4549        if response.status.is_success() {
4550            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4551            let result = proto::json::ResponsePayload::new(&response)
4552                .deserialize::<DeleteElasticsearchDomainResponse, _>()?;
4553
4554            Ok(result)
4555        } else {
4556            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4557            Err(DeleteElasticsearchDomainError::from_response(response))
4558        }
4559    }
4560
4561    /// <p>Deletes the service-linked role that Elasticsearch Service uses to manage and maintain VPC domains. Role deletion will fail if any existing VPC domains use the role. You must delete any such Elasticsearch domains before deleting the role. See <a href="http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-vpc.html#es-enabling-slr" target="_blank">Deleting Elasticsearch Service Role</a> in <i>VPC Endpoints for Amazon Elasticsearch Service Domains</i>.</p>
4562    #[allow(unused_mut)]
4563    async fn delete_elasticsearch_service_role(
4564        &self,
4565    ) -> Result<(), RusotoError<DeleteElasticsearchServiceRoleError>> {
4566        let request_uri = "/2015-01-01/es/role";
4567
4568        let mut request = SignedRequest::new("DELETE", "es", &self.region, &request_uri);
4569        request.set_content_type("application/x-amz-json-1.1".to_owned());
4570
4571        let mut response = self
4572            .client
4573            .sign_and_dispatch(request)
4574            .await
4575            .map_err(RusotoError::from)?;
4576        if response.status.is_success() {
4577            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4578            let result = ::std::mem::drop(response);
4579
4580            Ok(result)
4581        } else {
4582            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4583            Err(DeleteElasticsearchServiceRoleError::from_response(response))
4584        }
4585    }
4586
4587    /// <p>Allows the destination domain owner to delete an existing inbound cross-cluster search connection.</p>
4588    #[allow(unused_mut)]
4589    async fn delete_inbound_cross_cluster_search_connection(
4590        &self,
4591        input: DeleteInboundCrossClusterSearchConnectionRequest,
4592    ) -> Result<
4593        DeleteInboundCrossClusterSearchConnectionResponse,
4594        RusotoError<DeleteInboundCrossClusterSearchConnectionError>,
4595    > {
4596        let request_uri = format!(
4597            "/2015-01-01/es/ccs/inboundConnection/{connection_id}",
4598            connection_id = input.cross_cluster_search_connection_id
4599        );
4600
4601        let mut request = SignedRequest::new("DELETE", "es", &self.region, &request_uri);
4602        request.set_content_type("application/x-amz-json-1.1".to_owned());
4603
4604        let mut response = self
4605            .client
4606            .sign_and_dispatch(request)
4607            .await
4608            .map_err(RusotoError::from)?;
4609        if response.status.is_success() {
4610            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4611            let result = proto::json::ResponsePayload::new(&response)
4612                .deserialize::<DeleteInboundCrossClusterSearchConnectionResponse, _>()?;
4613
4614            Ok(result)
4615        } else {
4616            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4617            Err(DeleteInboundCrossClusterSearchConnectionError::from_response(response))
4618        }
4619    }
4620
4621    /// <p>Allows the source domain owner to delete an existing outbound cross-cluster search connection.</p>
4622    #[allow(unused_mut)]
4623    async fn delete_outbound_cross_cluster_search_connection(
4624        &self,
4625        input: DeleteOutboundCrossClusterSearchConnectionRequest,
4626    ) -> Result<
4627        DeleteOutboundCrossClusterSearchConnectionResponse,
4628        RusotoError<DeleteOutboundCrossClusterSearchConnectionError>,
4629    > {
4630        let request_uri = format!(
4631            "/2015-01-01/es/ccs/outboundConnection/{connection_id}",
4632            connection_id = input.cross_cluster_search_connection_id
4633        );
4634
4635        let mut request = SignedRequest::new("DELETE", "es", &self.region, &request_uri);
4636        request.set_content_type("application/x-amz-json-1.1".to_owned());
4637
4638        let mut response = self
4639            .client
4640            .sign_and_dispatch(request)
4641            .await
4642            .map_err(RusotoError::from)?;
4643        if response.status.is_success() {
4644            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4645            let result = proto::json::ResponsePayload::new(&response)
4646                .deserialize::<DeleteOutboundCrossClusterSearchConnectionResponse, _>()?;
4647
4648            Ok(result)
4649        } else {
4650            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4651            Err(DeleteOutboundCrossClusterSearchConnectionError::from_response(response))
4652        }
4653    }
4654
4655    /// <p>Delete the package.</p>
4656    #[allow(unused_mut)]
4657    async fn delete_package(
4658        &self,
4659        input: DeletePackageRequest,
4660    ) -> Result<DeletePackageResponse, RusotoError<DeletePackageError>> {
4661        let request_uri = format!(
4662            "/2015-01-01/packages/{package_id}",
4663            package_id = input.package_id
4664        );
4665
4666        let mut request = SignedRequest::new("DELETE", "es", &self.region, &request_uri);
4667        request.set_content_type("application/x-amz-json-1.1".to_owned());
4668
4669        let mut response = self
4670            .client
4671            .sign_and_dispatch(request)
4672            .await
4673            .map_err(RusotoError::from)?;
4674        if response.status.is_success() {
4675            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4676            let result = proto::json::ResponsePayload::new(&response)
4677                .deserialize::<DeletePackageResponse, _>()?;
4678
4679            Ok(result)
4680        } else {
4681            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4682            Err(DeletePackageError::from_response(response))
4683        }
4684    }
4685
4686    /// <p>Returns domain configuration information about the specified Elasticsearch domain, including the domain ID, domain endpoint, and domain ARN.</p>
4687    #[allow(unused_mut)]
4688    async fn describe_elasticsearch_domain(
4689        &self,
4690        input: DescribeElasticsearchDomainRequest,
4691    ) -> Result<DescribeElasticsearchDomainResponse, RusotoError<DescribeElasticsearchDomainError>>
4692    {
4693        let request_uri = format!(
4694            "/2015-01-01/es/domain/{domain_name}",
4695            domain_name = input.domain_name
4696        );
4697
4698        let mut request = SignedRequest::new("GET", "es", &self.region, &request_uri);
4699        request.set_content_type("application/x-amz-json-1.1".to_owned());
4700
4701        let mut response = self
4702            .client
4703            .sign_and_dispatch(request)
4704            .await
4705            .map_err(RusotoError::from)?;
4706        if response.status.is_success() {
4707            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4708            let result = proto::json::ResponsePayload::new(&response)
4709                .deserialize::<DescribeElasticsearchDomainResponse, _>()?;
4710
4711            Ok(result)
4712        } else {
4713            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4714            Err(DescribeElasticsearchDomainError::from_response(response))
4715        }
4716    }
4717
4718    /// <p>Provides cluster configuration information about the specified Elasticsearch domain, such as the state, creation date, update version, and update date for cluster options.</p>
4719    #[allow(unused_mut)]
4720    async fn describe_elasticsearch_domain_config(
4721        &self,
4722        input: DescribeElasticsearchDomainConfigRequest,
4723    ) -> Result<
4724        DescribeElasticsearchDomainConfigResponse,
4725        RusotoError<DescribeElasticsearchDomainConfigError>,
4726    > {
4727        let request_uri = format!(
4728            "/2015-01-01/es/domain/{domain_name}/config",
4729            domain_name = input.domain_name
4730        );
4731
4732        let mut request = SignedRequest::new("GET", "es", &self.region, &request_uri);
4733        request.set_content_type("application/x-amz-json-1.1".to_owned());
4734
4735        let mut response = self
4736            .client
4737            .sign_and_dispatch(request)
4738            .await
4739            .map_err(RusotoError::from)?;
4740        if response.status.is_success() {
4741            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4742            let result = proto::json::ResponsePayload::new(&response)
4743                .deserialize::<DescribeElasticsearchDomainConfigResponse, _>()?;
4744
4745            Ok(result)
4746        } else {
4747            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4748            Err(DescribeElasticsearchDomainConfigError::from_response(
4749                response,
4750            ))
4751        }
4752    }
4753
4754    /// <p>Returns domain configuration information about the specified Elasticsearch domains, including the domain ID, domain endpoint, and domain ARN.</p>
4755    #[allow(unused_mut)]
4756    async fn describe_elasticsearch_domains(
4757        &self,
4758        input: DescribeElasticsearchDomainsRequest,
4759    ) -> Result<DescribeElasticsearchDomainsResponse, RusotoError<DescribeElasticsearchDomainsError>>
4760    {
4761        let request_uri = "/2015-01-01/es/domain-info";
4762
4763        let mut request = SignedRequest::new("POST", "es", &self.region, &request_uri);
4764        request.set_content_type("application/x-amz-json-1.1".to_owned());
4765
4766        let encoded = Some(serde_json::to_vec(&input).unwrap());
4767        request.set_payload(encoded);
4768
4769        let mut response = self
4770            .client
4771            .sign_and_dispatch(request)
4772            .await
4773            .map_err(RusotoError::from)?;
4774        if response.status.is_success() {
4775            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4776            let result = proto::json::ResponsePayload::new(&response)
4777                .deserialize::<DescribeElasticsearchDomainsResponse, _>()?;
4778
4779            Ok(result)
4780        } else {
4781            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4782            Err(DescribeElasticsearchDomainsError::from_response(response))
4783        }
4784    }
4785
4786    /// <p> Describe Elasticsearch Limits for a given InstanceType and ElasticsearchVersion. When modifying existing Domain, specify the <code> <a>DomainName</a> </code> to know what Limits are supported for modifying. </p>
4787    #[allow(unused_mut)]
4788    async fn describe_elasticsearch_instance_type_limits(
4789        &self,
4790        input: DescribeElasticsearchInstanceTypeLimitsRequest,
4791    ) -> Result<
4792        DescribeElasticsearchInstanceTypeLimitsResponse,
4793        RusotoError<DescribeElasticsearchInstanceTypeLimitsError>,
4794    > {
4795        let request_uri = format!(
4796            "/2015-01-01/es/instanceTypeLimits/{elasticsearch_version}/{instance_type}",
4797            elasticsearch_version = input.elasticsearch_version,
4798            instance_type = input.instance_type
4799        );
4800
4801        let mut request = SignedRequest::new("GET", "es", &self.region, &request_uri);
4802        request.set_content_type("application/x-amz-json-1.1".to_owned());
4803
4804        let mut params = Params::new();
4805        if let Some(ref x) = input.domain_name {
4806            params.put("domainName", x);
4807        }
4808        request.set_params(params);
4809
4810        let mut response = self
4811            .client
4812            .sign_and_dispatch(request)
4813            .await
4814            .map_err(RusotoError::from)?;
4815        if response.status.is_success() {
4816            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4817            let result = proto::json::ResponsePayload::new(&response)
4818                .deserialize::<DescribeElasticsearchInstanceTypeLimitsResponse, _>()?;
4819
4820            Ok(result)
4821        } else {
4822            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4823            Err(DescribeElasticsearchInstanceTypeLimitsError::from_response(
4824                response,
4825            ))
4826        }
4827    }
4828
4829    /// <p>Lists all the inbound cross-cluster search connections for a destination domain.</p>
4830    #[allow(unused_mut)]
4831    async fn describe_inbound_cross_cluster_search_connections(
4832        &self,
4833        input: DescribeInboundCrossClusterSearchConnectionsRequest,
4834    ) -> Result<
4835        DescribeInboundCrossClusterSearchConnectionsResponse,
4836        RusotoError<DescribeInboundCrossClusterSearchConnectionsError>,
4837    > {
4838        let request_uri = "/2015-01-01/es/ccs/inboundConnection/search";
4839
4840        let mut request = SignedRequest::new("POST", "es", &self.region, &request_uri);
4841        request.set_content_type("application/x-amz-json-1.1".to_owned());
4842
4843        let encoded = Some(serde_json::to_vec(&input).unwrap());
4844        request.set_payload(encoded);
4845
4846        let mut response = self
4847            .client
4848            .sign_and_dispatch(request)
4849            .await
4850            .map_err(RusotoError::from)?;
4851        if response.status.is_success() {
4852            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4853            let result = proto::json::ResponsePayload::new(&response)
4854                .deserialize::<DescribeInboundCrossClusterSearchConnectionsResponse, _>(
4855            )?;
4856
4857            Ok(result)
4858        } else {
4859            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4860            Err(DescribeInboundCrossClusterSearchConnectionsError::from_response(response))
4861        }
4862    }
4863
4864    /// <p>Lists all the outbound cross-cluster search connections for a source domain.</p>
4865    #[allow(unused_mut)]
4866    async fn describe_outbound_cross_cluster_search_connections(
4867        &self,
4868        input: DescribeOutboundCrossClusterSearchConnectionsRequest,
4869    ) -> Result<
4870        DescribeOutboundCrossClusterSearchConnectionsResponse,
4871        RusotoError<DescribeOutboundCrossClusterSearchConnectionsError>,
4872    > {
4873        let request_uri = "/2015-01-01/es/ccs/outboundConnection/search";
4874
4875        let mut request = SignedRequest::new("POST", "es", &self.region, &request_uri);
4876        request.set_content_type("application/x-amz-json-1.1".to_owned());
4877
4878        let encoded = Some(serde_json::to_vec(&input).unwrap());
4879        request.set_payload(encoded);
4880
4881        let mut response = self
4882            .client
4883            .sign_and_dispatch(request)
4884            .await
4885            .map_err(RusotoError::from)?;
4886        if response.status.is_success() {
4887            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4888            let result = proto::json::ResponsePayload::new(&response)
4889                .deserialize::<DescribeOutboundCrossClusterSearchConnectionsResponse, _>(
4890            )?;
4891
4892            Ok(result)
4893        } else {
4894            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4895            Err(DescribeOutboundCrossClusterSearchConnectionsError::from_response(response))
4896        }
4897    }
4898
4899    /// <p>Describes all packages available to Amazon ES. Includes options for filtering, limiting the number of results, and pagination.</p>
4900    #[allow(unused_mut)]
4901    async fn describe_packages(
4902        &self,
4903        input: DescribePackagesRequest,
4904    ) -> Result<DescribePackagesResponse, RusotoError<DescribePackagesError>> {
4905        let request_uri = "/2015-01-01/packages/describe";
4906
4907        let mut request = SignedRequest::new("POST", "es", &self.region, &request_uri);
4908        request.set_content_type("application/x-amz-json-1.1".to_owned());
4909
4910        let encoded = Some(serde_json::to_vec(&input).unwrap());
4911        request.set_payload(encoded);
4912
4913        let mut response = self
4914            .client
4915            .sign_and_dispatch(request)
4916            .await
4917            .map_err(RusotoError::from)?;
4918        if response.status.is_success() {
4919            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4920            let result = proto::json::ResponsePayload::new(&response)
4921                .deserialize::<DescribePackagesResponse, _>()?;
4922
4923            Ok(result)
4924        } else {
4925            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4926            Err(DescribePackagesError::from_response(response))
4927        }
4928    }
4929
4930    /// <p>Lists available reserved Elasticsearch instance offerings.</p>
4931    #[allow(unused_mut)]
4932    async fn describe_reserved_elasticsearch_instance_offerings(
4933        &self,
4934        input: DescribeReservedElasticsearchInstanceOfferingsRequest,
4935    ) -> Result<
4936        DescribeReservedElasticsearchInstanceOfferingsResponse,
4937        RusotoError<DescribeReservedElasticsearchInstanceOfferingsError>,
4938    > {
4939        let request_uri = "/2015-01-01/es/reservedInstanceOfferings";
4940
4941        let mut request = SignedRequest::new("GET", "es", &self.region, &request_uri);
4942        request.set_content_type("application/x-amz-json-1.1".to_owned());
4943
4944        let mut params = Params::new();
4945        if let Some(ref x) = input.max_results {
4946            params.put("maxResults", x);
4947        }
4948        if let Some(ref x) = input.next_token {
4949            params.put("nextToken", x);
4950        }
4951        if let Some(ref x) = input.reserved_elasticsearch_instance_offering_id {
4952            params.put("offeringId", x);
4953        }
4954        request.set_params(params);
4955
4956        let mut response = self
4957            .client
4958            .sign_and_dispatch(request)
4959            .await
4960            .map_err(RusotoError::from)?;
4961        if response.status.is_success() {
4962            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4963            let result = proto::json::ResponsePayload::new(&response)
4964                .deserialize::<DescribeReservedElasticsearchInstanceOfferingsResponse, _>(
4965            )?;
4966
4967            Ok(result)
4968        } else {
4969            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4970            Err(DescribeReservedElasticsearchInstanceOfferingsError::from_response(response))
4971        }
4972    }
4973
4974    /// <p>Returns information about reserved Elasticsearch instances for this account.</p>
4975    #[allow(unused_mut)]
4976    async fn describe_reserved_elasticsearch_instances(
4977        &self,
4978        input: DescribeReservedElasticsearchInstancesRequest,
4979    ) -> Result<
4980        DescribeReservedElasticsearchInstancesResponse,
4981        RusotoError<DescribeReservedElasticsearchInstancesError>,
4982    > {
4983        let request_uri = "/2015-01-01/es/reservedInstances";
4984
4985        let mut request = SignedRequest::new("GET", "es", &self.region, &request_uri);
4986        request.set_content_type("application/x-amz-json-1.1".to_owned());
4987
4988        let mut params = Params::new();
4989        if let Some(ref x) = input.max_results {
4990            params.put("maxResults", x);
4991        }
4992        if let Some(ref x) = input.next_token {
4993            params.put("nextToken", x);
4994        }
4995        if let Some(ref x) = input.reserved_elasticsearch_instance_id {
4996            params.put("reservationId", x);
4997        }
4998        request.set_params(params);
4999
5000        let mut response = self
5001            .client
5002            .sign_and_dispatch(request)
5003            .await
5004            .map_err(RusotoError::from)?;
5005        if response.status.is_success() {
5006            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5007            let result = proto::json::ResponsePayload::new(&response)
5008                .deserialize::<DescribeReservedElasticsearchInstancesResponse, _>()?;
5009
5010            Ok(result)
5011        } else {
5012            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5013            Err(DescribeReservedElasticsearchInstancesError::from_response(
5014                response,
5015            ))
5016        }
5017    }
5018
5019    /// <p>Dissociates a package from the Amazon ES domain.</p>
5020    #[allow(unused_mut)]
5021    async fn dissociate_package(
5022        &self,
5023        input: DissociatePackageRequest,
5024    ) -> Result<DissociatePackageResponse, RusotoError<DissociatePackageError>> {
5025        let request_uri = format!(
5026            "/2015-01-01/packages/dissociate/{package_id}/{domain_name}",
5027            domain_name = input.domain_name,
5028            package_id = input.package_id
5029        );
5030
5031        let mut request = SignedRequest::new("POST", "es", &self.region, &request_uri);
5032        request.set_content_type("application/x-amz-json-1.1".to_owned());
5033
5034        let mut response = self
5035            .client
5036            .sign_and_dispatch(request)
5037            .await
5038            .map_err(RusotoError::from)?;
5039        if response.status.is_success() {
5040            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5041            let result = proto::json::ResponsePayload::new(&response)
5042                .deserialize::<DissociatePackageResponse, _>()?;
5043
5044            Ok(result)
5045        } else {
5046            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5047            Err(DissociatePackageError::from_response(response))
5048        }
5049    }
5050
5051    /// <p> Returns a list of upgrade compatible Elastisearch versions. You can optionally pass a <code> <a>DomainName</a> </code> to get all upgrade compatible Elasticsearch versions for that specific domain. </p>
5052    #[allow(unused_mut)]
5053    async fn get_compatible_elasticsearch_versions(
5054        &self,
5055        input: GetCompatibleElasticsearchVersionsRequest,
5056    ) -> Result<
5057        GetCompatibleElasticsearchVersionsResponse,
5058        RusotoError<GetCompatibleElasticsearchVersionsError>,
5059    > {
5060        let request_uri = "/2015-01-01/es/compatibleVersions";
5061
5062        let mut request = SignedRequest::new("GET", "es", &self.region, &request_uri);
5063        request.set_content_type("application/x-amz-json-1.1".to_owned());
5064
5065        let mut params = Params::new();
5066        if let Some(ref x) = input.domain_name {
5067            params.put("domainName", x);
5068        }
5069        request.set_params(params);
5070
5071        let mut response = self
5072            .client
5073            .sign_and_dispatch(request)
5074            .await
5075            .map_err(RusotoError::from)?;
5076        if response.status.is_success() {
5077            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5078            let result = proto::json::ResponsePayload::new(&response)
5079                .deserialize::<GetCompatibleElasticsearchVersionsResponse, _>()?;
5080
5081            Ok(result)
5082        } else {
5083            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5084            Err(GetCompatibleElasticsearchVersionsError::from_response(
5085                response,
5086            ))
5087        }
5088    }
5089
5090    /// <p>Retrieves the complete history of the last 10 upgrades that were performed on the domain.</p>
5091    #[allow(unused_mut)]
5092    async fn get_upgrade_history(
5093        &self,
5094        input: GetUpgradeHistoryRequest,
5095    ) -> Result<GetUpgradeHistoryResponse, RusotoError<GetUpgradeHistoryError>> {
5096        let request_uri = format!(
5097            "/2015-01-01/es/upgradeDomain/{domain_name}/history",
5098            domain_name = input.domain_name
5099        );
5100
5101        let mut request = SignedRequest::new("GET", "es", &self.region, &request_uri);
5102        request.set_content_type("application/x-amz-json-1.1".to_owned());
5103
5104        let mut params = Params::new();
5105        if let Some(ref x) = input.max_results {
5106            params.put("maxResults", x);
5107        }
5108        if let Some(ref x) = input.next_token {
5109            params.put("nextToken", x);
5110        }
5111        request.set_params(params);
5112
5113        let mut response = self
5114            .client
5115            .sign_and_dispatch(request)
5116            .await
5117            .map_err(RusotoError::from)?;
5118        if response.status.is_success() {
5119            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5120            let result = proto::json::ResponsePayload::new(&response)
5121                .deserialize::<GetUpgradeHistoryResponse, _>()?;
5122
5123            Ok(result)
5124        } else {
5125            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5126            Err(GetUpgradeHistoryError::from_response(response))
5127        }
5128    }
5129
5130    /// <p>Retrieves the latest status of the last upgrade or upgrade eligibility check that was performed on the domain.</p>
5131    #[allow(unused_mut)]
5132    async fn get_upgrade_status(
5133        &self,
5134        input: GetUpgradeStatusRequest,
5135    ) -> Result<GetUpgradeStatusResponse, RusotoError<GetUpgradeStatusError>> {
5136        let request_uri = format!(
5137            "/2015-01-01/es/upgradeDomain/{domain_name}/status",
5138            domain_name = input.domain_name
5139        );
5140
5141        let mut request = SignedRequest::new("GET", "es", &self.region, &request_uri);
5142        request.set_content_type("application/x-amz-json-1.1".to_owned());
5143
5144        let mut response = self
5145            .client
5146            .sign_and_dispatch(request)
5147            .await
5148            .map_err(RusotoError::from)?;
5149        if response.status.is_success() {
5150            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5151            let result = proto::json::ResponsePayload::new(&response)
5152                .deserialize::<GetUpgradeStatusResponse, _>()?;
5153
5154            Ok(result)
5155        } else {
5156            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5157            Err(GetUpgradeStatusError::from_response(response))
5158        }
5159    }
5160
5161    /// <p>Returns the name of all Elasticsearch domains owned by the current user's account. </p>
5162    #[allow(unused_mut)]
5163    async fn list_domain_names(
5164        &self,
5165    ) -> Result<ListDomainNamesResponse, RusotoError<ListDomainNamesError>> {
5166        let request_uri = "/2015-01-01/domain";
5167
5168        let mut request = SignedRequest::new("GET", "es", &self.region, &request_uri);
5169        request.set_content_type("application/x-amz-json-1.1".to_owned());
5170
5171        let mut response = self
5172            .client
5173            .sign_and_dispatch(request)
5174            .await
5175            .map_err(RusotoError::from)?;
5176        if response.status.is_success() {
5177            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5178            let result = proto::json::ResponsePayload::new(&response)
5179                .deserialize::<ListDomainNamesResponse, _>()?;
5180
5181            Ok(result)
5182        } else {
5183            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5184            Err(ListDomainNamesError::from_response(response))
5185        }
5186    }
5187
5188    /// <p>Lists all Amazon ES domains associated with the package.</p>
5189    #[allow(unused_mut)]
5190    async fn list_domains_for_package(
5191        &self,
5192        input: ListDomainsForPackageRequest,
5193    ) -> Result<ListDomainsForPackageResponse, RusotoError<ListDomainsForPackageError>> {
5194        let request_uri = format!(
5195            "/2015-01-01/packages/{package_id}/domains",
5196            package_id = input.package_id
5197        );
5198
5199        let mut request = SignedRequest::new("GET", "es", &self.region, &request_uri);
5200        request.set_content_type("application/x-amz-json-1.1".to_owned());
5201
5202        let mut params = Params::new();
5203        if let Some(ref x) = input.max_results {
5204            params.put("maxResults", x);
5205        }
5206        if let Some(ref x) = input.next_token {
5207            params.put("nextToken", x);
5208        }
5209        request.set_params(params);
5210
5211        let mut response = self
5212            .client
5213            .sign_and_dispatch(request)
5214            .await
5215            .map_err(RusotoError::from)?;
5216        if response.status.is_success() {
5217            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5218            let result = proto::json::ResponsePayload::new(&response)
5219                .deserialize::<ListDomainsForPackageResponse, _>()?;
5220
5221            Ok(result)
5222        } else {
5223            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5224            Err(ListDomainsForPackageError::from_response(response))
5225        }
5226    }
5227
5228    /// <p>List all Elasticsearch instance types that are supported for given ElasticsearchVersion</p>
5229    #[allow(unused_mut)]
5230    async fn list_elasticsearch_instance_types(
5231        &self,
5232        input: ListElasticsearchInstanceTypesRequest,
5233    ) -> Result<
5234        ListElasticsearchInstanceTypesResponse,
5235        RusotoError<ListElasticsearchInstanceTypesError>,
5236    > {
5237        let request_uri = format!(
5238            "/2015-01-01/es/instanceTypes/{elasticsearch_version}",
5239            elasticsearch_version = input.elasticsearch_version
5240        );
5241
5242        let mut request = SignedRequest::new("GET", "es", &self.region, &request_uri);
5243        request.set_content_type("application/x-amz-json-1.1".to_owned());
5244
5245        let mut params = Params::new();
5246        if let Some(ref x) = input.domain_name {
5247            params.put("domainName", x);
5248        }
5249        if let Some(ref x) = input.max_results {
5250            params.put("maxResults", x);
5251        }
5252        if let Some(ref x) = input.next_token {
5253            params.put("nextToken", x);
5254        }
5255        request.set_params(params);
5256
5257        let mut response = self
5258            .client
5259            .sign_and_dispatch(request)
5260            .await
5261            .map_err(RusotoError::from)?;
5262        if response.status.is_success() {
5263            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5264            let result = proto::json::ResponsePayload::new(&response)
5265                .deserialize::<ListElasticsearchInstanceTypesResponse, _>()?;
5266
5267            Ok(result)
5268        } else {
5269            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5270            Err(ListElasticsearchInstanceTypesError::from_response(response))
5271        }
5272    }
5273
5274    /// <p>List all supported Elasticsearch versions</p>
5275    #[allow(unused_mut)]
5276    async fn list_elasticsearch_versions(
5277        &self,
5278        input: ListElasticsearchVersionsRequest,
5279    ) -> Result<ListElasticsearchVersionsResponse, RusotoError<ListElasticsearchVersionsError>>
5280    {
5281        let request_uri = "/2015-01-01/es/versions";
5282
5283        let mut request = SignedRequest::new("GET", "es", &self.region, &request_uri);
5284        request.set_content_type("application/x-amz-json-1.1".to_owned());
5285
5286        let mut params = Params::new();
5287        if let Some(ref x) = input.max_results {
5288            params.put("maxResults", x);
5289        }
5290        if let Some(ref x) = input.next_token {
5291            params.put("nextToken", x);
5292        }
5293        request.set_params(params);
5294
5295        let mut response = self
5296            .client
5297            .sign_and_dispatch(request)
5298            .await
5299            .map_err(RusotoError::from)?;
5300        if response.status.is_success() {
5301            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5302            let result = proto::json::ResponsePayload::new(&response)
5303                .deserialize::<ListElasticsearchVersionsResponse, _>()?;
5304
5305            Ok(result)
5306        } else {
5307            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5308            Err(ListElasticsearchVersionsError::from_response(response))
5309        }
5310    }
5311
5312    /// <p>Lists all packages associated with the Amazon ES domain.</p>
5313    #[allow(unused_mut)]
5314    async fn list_packages_for_domain(
5315        &self,
5316        input: ListPackagesForDomainRequest,
5317    ) -> Result<ListPackagesForDomainResponse, RusotoError<ListPackagesForDomainError>> {
5318        let request_uri = format!(
5319            "/2015-01-01/domain/{domain_name}/packages",
5320            domain_name = input.domain_name
5321        );
5322
5323        let mut request = SignedRequest::new("GET", "es", &self.region, &request_uri);
5324        request.set_content_type("application/x-amz-json-1.1".to_owned());
5325
5326        let mut params = Params::new();
5327        if let Some(ref x) = input.max_results {
5328            params.put("maxResults", x);
5329        }
5330        if let Some(ref x) = input.next_token {
5331            params.put("nextToken", x);
5332        }
5333        request.set_params(params);
5334
5335        let mut response = self
5336            .client
5337            .sign_and_dispatch(request)
5338            .await
5339            .map_err(RusotoError::from)?;
5340        if response.status.is_success() {
5341            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5342            let result = proto::json::ResponsePayload::new(&response)
5343                .deserialize::<ListPackagesForDomainResponse, _>()?;
5344
5345            Ok(result)
5346        } else {
5347            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5348            Err(ListPackagesForDomainError::from_response(response))
5349        }
5350    }
5351
5352    /// <p>Returns all tags for the given Elasticsearch domain.</p>
5353    #[allow(unused_mut)]
5354    async fn list_tags(
5355        &self,
5356        input: ListTagsRequest,
5357    ) -> Result<ListTagsResponse, RusotoError<ListTagsError>> {
5358        let request_uri = "/2015-01-01/tags/";
5359
5360        let mut request = SignedRequest::new("GET", "es", &self.region, &request_uri);
5361        request.set_content_type("application/x-amz-json-1.1".to_owned());
5362
5363        let mut params = Params::new();
5364        params.put("arn", &input.arn);
5365        request.set_params(params);
5366
5367        let mut response = self
5368            .client
5369            .sign_and_dispatch(request)
5370            .await
5371            .map_err(RusotoError::from)?;
5372        if response.status.is_success() {
5373            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5374            let result = proto::json::ResponsePayload::new(&response)
5375                .deserialize::<ListTagsResponse, _>()?;
5376
5377            Ok(result)
5378        } else {
5379            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5380            Err(ListTagsError::from_response(response))
5381        }
5382    }
5383
5384    /// <p>Allows you to purchase reserved Elasticsearch instances.</p>
5385    #[allow(unused_mut)]
5386    async fn purchase_reserved_elasticsearch_instance_offering(
5387        &self,
5388        input: PurchaseReservedElasticsearchInstanceOfferingRequest,
5389    ) -> Result<
5390        PurchaseReservedElasticsearchInstanceOfferingResponse,
5391        RusotoError<PurchaseReservedElasticsearchInstanceOfferingError>,
5392    > {
5393        let request_uri = "/2015-01-01/es/purchaseReservedInstanceOffering";
5394
5395        let mut request = SignedRequest::new("POST", "es", &self.region, &request_uri);
5396        request.set_content_type("application/x-amz-json-1.1".to_owned());
5397
5398        let encoded = Some(serde_json::to_vec(&input).unwrap());
5399        request.set_payload(encoded);
5400
5401        let mut response = self
5402            .client
5403            .sign_and_dispatch(request)
5404            .await
5405            .map_err(RusotoError::from)?;
5406        if response.status.is_success() {
5407            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5408            let result = proto::json::ResponsePayload::new(&response)
5409                .deserialize::<PurchaseReservedElasticsearchInstanceOfferingResponse, _>(
5410            )?;
5411
5412            Ok(result)
5413        } else {
5414            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5415            Err(PurchaseReservedElasticsearchInstanceOfferingError::from_response(response))
5416        }
5417    }
5418
5419    /// <p>Allows the destination domain owner to reject an inbound cross-cluster search connection request.</p>
5420    #[allow(unused_mut)]
5421    async fn reject_inbound_cross_cluster_search_connection(
5422        &self,
5423        input: RejectInboundCrossClusterSearchConnectionRequest,
5424    ) -> Result<
5425        RejectInboundCrossClusterSearchConnectionResponse,
5426        RusotoError<RejectInboundCrossClusterSearchConnectionError>,
5427    > {
5428        let request_uri = format!(
5429            "/2015-01-01/es/ccs/inboundConnection/{connection_id}/reject",
5430            connection_id = input.cross_cluster_search_connection_id
5431        );
5432
5433        let mut request = SignedRequest::new("PUT", "es", &self.region, &request_uri);
5434        request.set_content_type("application/x-amz-json-1.1".to_owned());
5435
5436        let mut response = self
5437            .client
5438            .sign_and_dispatch(request)
5439            .await
5440            .map_err(RusotoError::from)?;
5441        if response.status.is_success() {
5442            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5443            let result = proto::json::ResponsePayload::new(&response)
5444                .deserialize::<RejectInboundCrossClusterSearchConnectionResponse, _>()?;
5445
5446            Ok(result)
5447        } else {
5448            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5449            Err(RejectInboundCrossClusterSearchConnectionError::from_response(response))
5450        }
5451    }
5452
5453    /// <p>Removes the specified set of tags from the specified Elasticsearch domain.</p>
5454    #[allow(unused_mut)]
5455    async fn remove_tags(
5456        &self,
5457        input: RemoveTagsRequest,
5458    ) -> Result<(), RusotoError<RemoveTagsError>> {
5459        let request_uri = "/2015-01-01/tags-removal";
5460
5461        let mut request = SignedRequest::new("POST", "es", &self.region, &request_uri);
5462        request.set_content_type("application/x-amz-json-1.1".to_owned());
5463
5464        let encoded = Some(serde_json::to_vec(&input).unwrap());
5465        request.set_payload(encoded);
5466
5467        let mut response = self
5468            .client
5469            .sign_and_dispatch(request)
5470            .await
5471            .map_err(RusotoError::from)?;
5472        if response.status.is_success() {
5473            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5474            let result = ::std::mem::drop(response);
5475
5476            Ok(result)
5477        } else {
5478            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5479            Err(RemoveTagsError::from_response(response))
5480        }
5481    }
5482
5483    /// <p>Schedules a service software update for an Amazon ES domain.</p>
5484    #[allow(unused_mut)]
5485    async fn start_elasticsearch_service_software_update(
5486        &self,
5487        input: StartElasticsearchServiceSoftwareUpdateRequest,
5488    ) -> Result<
5489        StartElasticsearchServiceSoftwareUpdateResponse,
5490        RusotoError<StartElasticsearchServiceSoftwareUpdateError>,
5491    > {
5492        let request_uri = "/2015-01-01/es/serviceSoftwareUpdate/start";
5493
5494        let mut request = SignedRequest::new("POST", "es", &self.region, &request_uri);
5495        request.set_content_type("application/x-amz-json-1.1".to_owned());
5496
5497        let encoded = Some(serde_json::to_vec(&input).unwrap());
5498        request.set_payload(encoded);
5499
5500        let mut response = self
5501            .client
5502            .sign_and_dispatch(request)
5503            .await
5504            .map_err(RusotoError::from)?;
5505        if response.status.is_success() {
5506            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5507            let result = proto::json::ResponsePayload::new(&response)
5508                .deserialize::<StartElasticsearchServiceSoftwareUpdateResponse, _>()?;
5509
5510            Ok(result)
5511        } else {
5512            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5513            Err(StartElasticsearchServiceSoftwareUpdateError::from_response(
5514                response,
5515            ))
5516        }
5517    }
5518
5519    /// <p>Modifies the cluster configuration of the specified Elasticsearch domain, setting as setting the instance type and the number of instances. </p>
5520    #[allow(unused_mut)]
5521    async fn update_elasticsearch_domain_config(
5522        &self,
5523        input: UpdateElasticsearchDomainConfigRequest,
5524    ) -> Result<
5525        UpdateElasticsearchDomainConfigResponse,
5526        RusotoError<UpdateElasticsearchDomainConfigError>,
5527    > {
5528        let request_uri = format!(
5529            "/2015-01-01/es/domain/{domain_name}/config",
5530            domain_name = input.domain_name
5531        );
5532
5533        let mut request = SignedRequest::new("POST", "es", &self.region, &request_uri);
5534        request.set_content_type("application/x-amz-json-1.1".to_owned());
5535
5536        let encoded = Some(serde_json::to_vec(&input).unwrap());
5537        request.set_payload(encoded);
5538
5539        let mut response = self
5540            .client
5541            .sign_and_dispatch(request)
5542            .await
5543            .map_err(RusotoError::from)?;
5544        if response.status.is_success() {
5545            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5546            let result = proto::json::ResponsePayload::new(&response)
5547                .deserialize::<UpdateElasticsearchDomainConfigResponse, _>()?;
5548
5549            Ok(result)
5550        } else {
5551            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5552            Err(UpdateElasticsearchDomainConfigError::from_response(
5553                response,
5554            ))
5555        }
5556    }
5557
5558    /// <p>Allows you to either upgrade your domain or perform an Upgrade eligibility check to a compatible Elasticsearch version.</p>
5559    #[allow(unused_mut)]
5560    async fn upgrade_elasticsearch_domain(
5561        &self,
5562        input: UpgradeElasticsearchDomainRequest,
5563    ) -> Result<UpgradeElasticsearchDomainResponse, RusotoError<UpgradeElasticsearchDomainError>>
5564    {
5565        let request_uri = "/2015-01-01/es/upgradeDomain";
5566
5567        let mut request = SignedRequest::new("POST", "es", &self.region, &request_uri);
5568        request.set_content_type("application/x-amz-json-1.1".to_owned());
5569
5570        let encoded = Some(serde_json::to_vec(&input).unwrap());
5571        request.set_payload(encoded);
5572
5573        let mut response = self
5574            .client
5575            .sign_and_dispatch(request)
5576            .await
5577            .map_err(RusotoError::from)?;
5578        if response.status.is_success() {
5579            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5580            let result = proto::json::ResponsePayload::new(&response)
5581                .deserialize::<UpgradeElasticsearchDomainResponse, _>()?;
5582
5583            Ok(result)
5584        } else {
5585            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5586            Err(UpgradeElasticsearchDomainError::from_response(response))
5587        }
5588    }
5589}