rusoto_pinpoint_email/
generated.rs

1// =================================================================
2//
3//                           * WARNING *
4//
5//                    This file is generated!
6//
7//  Changes made to this file will be overwritten. If changes are
8//  required to the generated code, the service_crategen project
9//  must be updated to generate the changes.
10//
11// =================================================================
12
13use std::error::Error;
14use std::fmt;
15
16use async_trait::async_trait;
17use rusoto_core::credential::ProvideAwsCredentials;
18use rusoto_core::region;
19use rusoto_core::request::{BufferedHttpResponse, DispatchSignedRequest};
20use rusoto_core::{Client, RusotoError};
21
22use rusoto_core::param::{Params, ServiceParams};
23use rusoto_core::proto;
24use rusoto_core::signature::SignedRequest;
25#[allow(unused_imports)]
26use serde::{Deserialize, Serialize};
27use serde_json;
28/// <p>An object that contains information about a blacklisting event that impacts one of the dedicated IP addresses that is associated with your account.</p>
29#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
30#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
31pub struct BlacklistEntry {
32    /// <p>Additional information about the blacklisting event, as provided by the blacklist maintainer.</p>
33    #[serde(rename = "Description")]
34    #[serde(skip_serializing_if = "Option::is_none")]
35    pub description: Option<String>,
36    /// <p>The time when the blacklisting event occurred, shown in Unix time format.</p>
37    #[serde(rename = "ListingTime")]
38    #[serde(skip_serializing_if = "Option::is_none")]
39    pub listing_time: Option<f64>,
40    /// <p>The name of the blacklist that the IP address appears on.</p>
41    #[serde(rename = "RblName")]
42    #[serde(skip_serializing_if = "Option::is_none")]
43    pub rbl_name: Option<String>,
44}
45
46/// <p>Represents the body of the email message.</p>
47#[derive(Clone, Debug, Default, PartialEq, Serialize)]
48#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
49pub struct Body {
50    /// <p>An object that represents the version of the message that is displayed in email clients that support HTML. HTML messages can include formatted text, hyperlinks, images, and more. </p>
51    #[serde(rename = "Html")]
52    #[serde(skip_serializing_if = "Option::is_none")]
53    pub html: Option<Content>,
54    /// <p>An object that represents the version of the message that is displayed in email clients that don't support HTML, or clients where the recipient has disabled HTML rendering.</p>
55    #[serde(rename = "Text")]
56    #[serde(skip_serializing_if = "Option::is_none")]
57    pub text: Option<Content>,
58}
59
60/// <p>An object that defines an Amazon CloudWatch destination for email events. You can use Amazon CloudWatch to monitor and gain insights on your email sending metrics.</p>
61#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
62pub struct CloudWatchDestination {
63    /// <p>An array of objects that define the dimensions to use when you send email events to Amazon CloudWatch.</p>
64    #[serde(rename = "DimensionConfigurations")]
65    pub dimension_configurations: Vec<CloudWatchDimensionConfiguration>,
66}
67
68/// <p>An object that defines the dimension configuration to use when you send Amazon Pinpoint email events to Amazon CloudWatch.</p>
69#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
70pub struct CloudWatchDimensionConfiguration {
71    /// <p><p>The default value of the dimension that is published to Amazon CloudWatch if you don&#39;t provide the value of the dimension when you send an email. This value has to meet the following criteria:</p> <ul> <li> <p>It can only contain ASCII letters (a-z, A-Z), numbers (0-9), underscores (_), or dashes (-).</p> </li> <li> <p>It can contain no more than 256 characters.</p> </li> </ul></p>
72    #[serde(rename = "DefaultDimensionValue")]
73    pub default_dimension_value: String,
74    /// <p><p>The name of an Amazon CloudWatch dimension associated with an email sending metric. The name has to meet the following criteria:</p> <ul> <li> <p>It can only contain ASCII letters (a-z, A-Z), numbers (0-9), underscores (_), or dashes (-).</p> </li> <li> <p>It can contain no more than 256 characters.</p> </li> </ul></p>
75    #[serde(rename = "DimensionName")]
76    pub dimension_name: String,
77    /// <p>The location where Amazon Pinpoint finds the value of a dimension to publish to Amazon CloudWatch. If you want Amazon Pinpoint to use the message tags that you specify using an X-SES-MESSAGE-TAGS header or a parameter to the SendEmail/SendRawEmail API, choose <code>messageTag</code>. If you want Amazon Pinpoint to use your own email headers, choose <code>emailHeader</code>. If you want Amazon Pinpoint to use link tags, choose <code>linkTags</code>.</p>
78    #[serde(rename = "DimensionValueSource")]
79    pub dimension_value_source: String,
80}
81
82/// <p>An object that represents the content of the email, and optionally a character set specification.</p>
83#[derive(Clone, Debug, Default, PartialEq, Serialize)]
84#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
85pub struct Content {
86    /// <p>The character set for the content. Because of the constraints of the SMTP protocol, Amazon Pinpoint uses 7-bit ASCII by default. If the text includes characters outside of the ASCII range, you have to specify a character set. For example, you could specify <code>UTF-8</code>, <code>ISO-8859-1</code>, or <code>Shift_JIS</code>.</p>
87    #[serde(rename = "Charset")]
88    #[serde(skip_serializing_if = "Option::is_none")]
89    pub charset: Option<String>,
90    /// <p>The content of the message itself.</p>
91    #[serde(rename = "Data")]
92    pub data: String,
93}
94
95/// <p>A request to add an event destination to a configuration set.</p>
96#[derive(Clone, Debug, Default, PartialEq, Serialize)]
97#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
98pub struct CreateConfigurationSetEventDestinationRequest {
99    /// <p>The name of the configuration set that you want to add an event destination to.</p>
100    #[serde(rename = "ConfigurationSetName")]
101    pub configuration_set_name: String,
102    /// <p>An object that defines the event destination.</p>
103    #[serde(rename = "EventDestination")]
104    pub event_destination: EventDestinationDefinition,
105    /// <p>A name that identifies the event destination within the configuration set.</p>
106    #[serde(rename = "EventDestinationName")]
107    pub event_destination_name: String,
108}
109
110/// <p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>
111#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
112#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
113pub struct CreateConfigurationSetEventDestinationResponse {}
114
115/// <p>A request to create a configuration set.</p>
116#[derive(Clone, Debug, Default, PartialEq, Serialize)]
117#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
118pub struct CreateConfigurationSetRequest {
119    /// <p>The name of the configuration set.</p>
120    #[serde(rename = "ConfigurationSetName")]
121    pub configuration_set_name: String,
122    /// <p>An object that defines the dedicated IP pool that is used to send emails that you send using the configuration set.</p>
123    #[serde(rename = "DeliveryOptions")]
124    #[serde(skip_serializing_if = "Option::is_none")]
125    pub delivery_options: Option<DeliveryOptions>,
126    /// <p>An object that defines whether or not Amazon Pinpoint collects reputation metrics for the emails that you send that use the configuration set.</p>
127    #[serde(rename = "ReputationOptions")]
128    #[serde(skip_serializing_if = "Option::is_none")]
129    pub reputation_options: Option<ReputationOptions>,
130    /// <p>An object that defines whether or not Amazon Pinpoint can send email that you send using the configuration set.</p>
131    #[serde(rename = "SendingOptions")]
132    #[serde(skip_serializing_if = "Option::is_none")]
133    pub sending_options: Option<SendingOptions>,
134    /// <p>An array of objects that define the tags (keys and values) that you want to associate with the configuration set.</p>
135    #[serde(rename = "Tags")]
136    #[serde(skip_serializing_if = "Option::is_none")]
137    pub tags: Option<Vec<Tag>>,
138    /// <p>An object that defines the open and click tracking options for emails that you send using the configuration set.</p>
139    #[serde(rename = "TrackingOptions")]
140    #[serde(skip_serializing_if = "Option::is_none")]
141    pub tracking_options: Option<TrackingOptions>,
142}
143
144/// <p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>
145#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
146#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
147pub struct CreateConfigurationSetResponse {}
148
149/// <p>A request to create a new dedicated IP pool.</p>
150#[derive(Clone, Debug, Default, PartialEq, Serialize)]
151#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
152pub struct CreateDedicatedIpPoolRequest {
153    /// <p>The name of the dedicated IP pool.</p>
154    #[serde(rename = "PoolName")]
155    pub pool_name: String,
156    /// <p>An object that defines the tags (keys and values) that you want to associate with the pool.</p>
157    #[serde(rename = "Tags")]
158    #[serde(skip_serializing_if = "Option::is_none")]
159    pub tags: Option<Vec<Tag>>,
160}
161
162/// <p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>
163#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
164#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
165pub struct CreateDedicatedIpPoolResponse {}
166
167/// <p>A request to perform a predictive inbox placement test. Predictive inbox placement tests can help you predict how your messages will be handled by various email providers around the world. When you perform a predictive inbox placement test, you provide a sample message that contains the content that you plan to send to your customers. Amazon Pinpoint then sends that message to special email addresses spread across several major email providers. After about 24 hours, the test is complete, and you can use the <code>GetDeliverabilityTestReport</code> operation to view the results of the test.</p>
168#[derive(Clone, Debug, Default, PartialEq, Serialize)]
169#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
170pub struct CreateDeliverabilityTestReportRequest {
171    /// <p>The HTML body of the message that you sent when you performed the predictive inbox placement test.</p>
172    #[serde(rename = "Content")]
173    pub content: EmailContent,
174    /// <p>The email address that the predictive inbox placement test email was sent from.</p>
175    #[serde(rename = "FromEmailAddress")]
176    pub from_email_address: String,
177    /// <p>A unique name that helps you to identify the predictive inbox placement test when you retrieve the results.</p>
178    #[serde(rename = "ReportName")]
179    #[serde(skip_serializing_if = "Option::is_none")]
180    pub report_name: Option<String>,
181    /// <p>An array of objects that define the tags (keys and values) that you want to associate with the predictive inbox placement test.</p>
182    #[serde(rename = "Tags")]
183    #[serde(skip_serializing_if = "Option::is_none")]
184    pub tags: Option<Vec<Tag>>,
185}
186
187/// <p>Information about the predictive inbox placement test that you created.</p>
188#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
189#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
190pub struct CreateDeliverabilityTestReportResponse {
191    /// <p>The status of the predictive inbox placement test. If the status is <code>IN_PROGRESS</code>, then the predictive inbox placement test is currently running. Predictive inbox placement tests are usually complete within 24 hours of creating the test. If the status is <code>COMPLETE</code>, then the test is finished, and you can use the <code>GetDeliverabilityTestReport</code> to view the results of the test.</p>
192    #[serde(rename = "DeliverabilityTestStatus")]
193    pub deliverability_test_status: String,
194    /// <p>A unique string that identifies the predictive inbox placement test.</p>
195    #[serde(rename = "ReportId")]
196    pub report_id: String,
197}
198
199/// <p>A request to begin the verification process for an email identity (an email address or domain).</p>
200#[derive(Clone, Debug, Default, PartialEq, Serialize)]
201#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
202pub struct CreateEmailIdentityRequest {
203    /// <p>The email address or domain that you want to verify.</p>
204    #[serde(rename = "EmailIdentity")]
205    pub email_identity: String,
206    /// <p>An array of objects that define the tags (keys and values) that you want to associate with the email identity.</p>
207    #[serde(rename = "Tags")]
208    #[serde(skip_serializing_if = "Option::is_none")]
209    pub tags: Option<Vec<Tag>>,
210}
211
212/// <p>If the email identity is a domain, this object contains tokens that you can use to create a set of CNAME records. To sucessfully verify your domain, you have to add these records to the DNS configuration for your domain.</p> <p>If the email identity is an email address, this object is empty. </p>
213#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
214#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
215pub struct CreateEmailIdentityResponse {
216    /// <p>An object that contains information about the DKIM attributes for the identity. This object includes the tokens that you use to create the CNAME records that are required to complete the DKIM verification process.</p>
217    #[serde(rename = "DkimAttributes")]
218    #[serde(skip_serializing_if = "Option::is_none")]
219    pub dkim_attributes: Option<DkimAttributes>,
220    /// <p>The email identity type.</p>
221    #[serde(rename = "IdentityType")]
222    #[serde(skip_serializing_if = "Option::is_none")]
223    pub identity_type: Option<String>,
224    /// <p>Specifies whether or not the identity is verified. In Amazon Pinpoint, you can only send email from verified email addresses or domains. For more information about verifying identities, see the <a href="https://docs.aws.amazon.com/pinpoint/latest/userguide/channels-email-manage-verify.html">Amazon Pinpoint User Guide</a>.</p>
225    #[serde(rename = "VerifiedForSendingStatus")]
226    #[serde(skip_serializing_if = "Option::is_none")]
227    pub verified_for_sending_status: Option<bool>,
228}
229
230/// <p>An object that contains information about the volume of email sent on each day of the analysis period.</p>
231#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
232#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
233pub struct DailyVolume {
234    /// <p>An object that contains inbox placement metrics for a specified day in the analysis period, broken out by the recipient's email provider.</p>
235    #[serde(rename = "DomainIspPlacements")]
236    #[serde(skip_serializing_if = "Option::is_none")]
237    pub domain_isp_placements: Option<Vec<DomainIspPlacement>>,
238    /// <p>The date that the DailyVolume metrics apply to, in Unix time.</p>
239    #[serde(rename = "StartDate")]
240    #[serde(skip_serializing_if = "Option::is_none")]
241    pub start_date: Option<f64>,
242    /// <p>An object that contains inbox placement metrics for a specific day in the analysis period.</p>
243    #[serde(rename = "VolumeStatistics")]
244    #[serde(skip_serializing_if = "Option::is_none")]
245    pub volume_statistics: Option<VolumeStatistics>,
246}
247
248/// <p><p>Contains information about a dedicated IP address that is associated with your Amazon Pinpoint account.</p> <p/></p>
249#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
250#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
251pub struct DedicatedIp {
252    /// <p>An IP address that is reserved for use by your Amazon Pinpoint account.</p>
253    #[serde(rename = "Ip")]
254    pub ip: String,
255    /// <p>The name of the dedicated IP pool that the IP address is associated with.</p>
256    #[serde(rename = "PoolName")]
257    #[serde(skip_serializing_if = "Option::is_none")]
258    pub pool_name: Option<String>,
259    /// <p>Indicates how complete the dedicated IP warm-up process is. When this value equals 1, the address has completed the warm-up process and is ready for use.</p>
260    #[serde(rename = "WarmupPercentage")]
261    pub warmup_percentage: i64,
262    /// <p><p>The warm-up status of a dedicated IP address. The status can have one of the following values:</p> <ul> <li> <p> <code>IN_PROGRESS</code> – The IP address isn&#39;t ready to use because the dedicated IP warm-up process is ongoing.</p> </li> <li> <p> <code>DONE</code> – The dedicated IP warm-up process is complete, and the IP address is ready to use.</p> </li> </ul></p>
263    #[serde(rename = "WarmupStatus")]
264    pub warmup_status: String,
265}
266
267/// <p>A request to delete an event destination from a configuration set.</p>
268#[derive(Clone, Debug, Default, PartialEq, Serialize)]
269#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
270pub struct DeleteConfigurationSetEventDestinationRequest {
271    /// <p>The name of the configuration set that contains the event destination that you want to delete.</p>
272    #[serde(rename = "ConfigurationSetName")]
273    pub configuration_set_name: String,
274    /// <p>The name of the event destination that you want to delete.</p>
275    #[serde(rename = "EventDestinationName")]
276    pub event_destination_name: String,
277}
278
279/// <p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>
280#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
281#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
282pub struct DeleteConfigurationSetEventDestinationResponse {}
283
284/// <p>A request to delete a configuration set.</p>
285#[derive(Clone, Debug, Default, PartialEq, Serialize)]
286#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
287pub struct DeleteConfigurationSetRequest {
288    /// <p>The name of the configuration set that you want to delete.</p>
289    #[serde(rename = "ConfigurationSetName")]
290    pub configuration_set_name: String,
291}
292
293/// <p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>
294#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
295#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
296pub struct DeleteConfigurationSetResponse {}
297
298/// <p>A request to delete a dedicated IP pool.</p>
299#[derive(Clone, Debug, Default, PartialEq, Serialize)]
300#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
301pub struct DeleteDedicatedIpPoolRequest {
302    /// <p>The name of the dedicated IP pool that you want to delete.</p>
303    #[serde(rename = "PoolName")]
304    pub pool_name: String,
305}
306
307/// <p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>
308#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
309#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
310pub struct DeleteDedicatedIpPoolResponse {}
311
312/// <p>A request to delete an existing email identity. When you delete an identity, you lose the ability to use Amazon Pinpoint to send email from that identity. You can restore your ability to send email by completing the verification process for the identity again.</p>
313#[derive(Clone, Debug, Default, PartialEq, Serialize)]
314#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
315pub struct DeleteEmailIdentityRequest {
316    /// <p>The identity (that is, the email address or domain) that you want to delete from your Amazon Pinpoint account.</p>
317    #[serde(rename = "EmailIdentity")]
318    pub email_identity: String,
319}
320
321/// <p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>
322#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
323#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
324pub struct DeleteEmailIdentityResponse {}
325
326/// <p>An object that contains metadata related to a predictive inbox placement test.</p>
327#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
328#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
329pub struct DeliverabilityTestReport {
330    /// <p>The date and time when the predictive inbox placement test was created, in Unix time format.</p>
331    #[serde(rename = "CreateDate")]
332    #[serde(skip_serializing_if = "Option::is_none")]
333    pub create_date: Option<f64>,
334    /// <p>The status of the predictive inbox placement test. If the status is <code>IN_PROGRESS</code>, then the predictive inbox placement test is currently running. Predictive inbox placement tests are usually complete within 24 hours of creating the test. If the status is <code>COMPLETE</code>, then the test is finished, and you can use the <code>GetDeliverabilityTestReport</code> to view the results of the test.</p>
335    #[serde(rename = "DeliverabilityTestStatus")]
336    #[serde(skip_serializing_if = "Option::is_none")]
337    pub deliverability_test_status: Option<String>,
338    /// <p>The sender address that you specified for the predictive inbox placement test.</p>
339    #[serde(rename = "FromEmailAddress")]
340    #[serde(skip_serializing_if = "Option::is_none")]
341    pub from_email_address: Option<String>,
342    /// <p>A unique string that identifies the predictive inbox placement test.</p>
343    #[serde(rename = "ReportId")]
344    #[serde(skip_serializing_if = "Option::is_none")]
345    pub report_id: Option<String>,
346    /// <p>A name that helps you identify a predictive inbox placement test report.</p>
347    #[serde(rename = "ReportName")]
348    #[serde(skip_serializing_if = "Option::is_none")]
349    pub report_name: Option<String>,
350    /// <p>The subject line for an email that you submitted in a predictive inbox placement test.</p>
351    #[serde(rename = "Subject")]
352    #[serde(skip_serializing_if = "Option::is_none")]
353    pub subject: Option<String>,
354}
355
356/// <p>Used to associate a configuration set with a dedicated IP pool.</p>
357#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
358pub struct DeliveryOptions {
359    /// <p>The name of the dedicated IP pool that you want to associate with the configuration set.</p>
360    #[serde(rename = "SendingPoolName")]
361    #[serde(skip_serializing_if = "Option::is_none")]
362    pub sending_pool_name: Option<String>,
363    /// <p>Specifies whether messages that use the configuration set are required to use Transport Layer Security (TLS). If the value is <code>Require</code>, messages are only delivered if a TLS connection can be established. If the value is <code>Optional</code>, messages can be delivered in plain text if a TLS connection can't be established.</p>
364    #[serde(rename = "TlsPolicy")]
365    #[serde(skip_serializing_if = "Option::is_none")]
366    pub tls_policy: Option<String>,
367}
368
369/// <p>An object that describes the recipients for an email.</p>
370#[derive(Clone, Debug, Default, PartialEq, Serialize)]
371#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
372pub struct Destination {
373    /// <p>An array that contains the email addresses of the "BCC" (blind carbon copy) recipients for the email.</p>
374    #[serde(rename = "BccAddresses")]
375    #[serde(skip_serializing_if = "Option::is_none")]
376    pub bcc_addresses: Option<Vec<String>>,
377    /// <p>An array that contains the email addresses of the "CC" (carbon copy) recipients for the email.</p>
378    #[serde(rename = "CcAddresses")]
379    #[serde(skip_serializing_if = "Option::is_none")]
380    pub cc_addresses: Option<Vec<String>>,
381    /// <p>An array that contains the email addresses of the "To" recipients for the email.</p>
382    #[serde(rename = "ToAddresses")]
383    #[serde(skip_serializing_if = "Option::is_none")]
384    pub to_addresses: Option<Vec<String>>,
385}
386
387/// <p>An object that contains information about the DKIM configuration for an email identity.</p>
388#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
389#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
390pub struct DkimAttributes {
391    /// <p>If the value is <code>true</code>, then the messages that Amazon Pinpoint sends from the identity are DKIM-signed. If the value is <code>false</code>, then the messages that Amazon Pinpoint sends from the identity aren't DKIM-signed.</p>
392    #[serde(rename = "SigningEnabled")]
393    #[serde(skip_serializing_if = "Option::is_none")]
394    pub signing_enabled: Option<bool>,
395    /// <p><p>Describes whether or not Amazon Pinpoint has successfully located the DKIM records in the DNS records for the domain. The status can be one of the following:</p> <ul> <li> <p> <code>PENDING</code> – Amazon Pinpoint hasn&#39;t yet located the DKIM records in the DNS configuration for the domain, but will continue to attempt to locate them.</p> </li> <li> <p> <code>SUCCESS</code> – Amazon Pinpoint located the DKIM records in the DNS configuration for the domain and determined that they&#39;re correct. Amazon Pinpoint can now send DKIM-signed email from the identity.</p> </li> <li> <p> <code>FAILED</code> – Amazon Pinpoint was unable to locate the DKIM records in the DNS settings for the domain, and won&#39;t continue to search for them.</p> </li> <li> <p> <code>TEMPORARY<em>FAILURE</code> – A temporary issue occurred, which prevented Amazon Pinpoint from determining the DKIM status for the domain.</p> </li> <li> <p> <code>NOT</em>STARTED</code> – Amazon Pinpoint hasn&#39;t yet started searching for the DKIM records in the DKIM records for the domain.</p> </li> </ul></p>
396    #[serde(rename = "Status")]
397    #[serde(skip_serializing_if = "Option::is_none")]
398    pub status: Option<String>,
399    /// <p>A set of unique strings that you use to create a set of CNAME records that you add to the DNS configuration for your domain. When Amazon Pinpoint detects these records in the DNS configuration for your domain, the DKIM authentication process is complete. Amazon Pinpoint usually detects these records within about 72 hours of adding them to the DNS configuration for your domain.</p>
400    #[serde(rename = "Tokens")]
401    #[serde(skip_serializing_if = "Option::is_none")]
402    pub tokens: Option<Vec<String>>,
403}
404
405/// <p>An object that contains the deliverability data for a specific campaign. This data is available for a campaign only if the campaign sent email by using a domain that the Deliverability dashboard is enabled for (<code>PutDeliverabilityDashboardOption</code> operation).</p>
406#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
407#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
408pub struct DomainDeliverabilityCampaign {
409    /// <p>The unique identifier for the campaign. Amazon Pinpoint automatically generates and assigns this identifier to a campaign. This value is not the same as the campaign identifier that Amazon Pinpoint assigns to campaigns that you create and manage by using the Amazon Pinpoint API or the Amazon Pinpoint console.</p>
410    #[serde(rename = "CampaignId")]
411    #[serde(skip_serializing_if = "Option::is_none")]
412    pub campaign_id: Option<String>,
413    /// <p>The percentage of email messages that were deleted by recipients, without being opened first. Due to technical limitations, this value only includes recipients who opened the message by using an email client that supports images.</p>
414    #[serde(rename = "DeleteRate")]
415    #[serde(skip_serializing_if = "Option::is_none")]
416    pub delete_rate: Option<f64>,
417    /// <p>The major email providers who handled the email message.</p>
418    #[serde(rename = "Esps")]
419    #[serde(skip_serializing_if = "Option::is_none")]
420    pub esps: Option<Vec<String>>,
421    /// <p>The first time, in Unix time format, when the email message was delivered to any recipient's inbox. This value can help you determine how long it took for a campaign to deliver an email message.</p>
422    #[serde(rename = "FirstSeenDateTime")]
423    #[serde(skip_serializing_if = "Option::is_none")]
424    pub first_seen_date_time: Option<f64>,
425    /// <p>The verified email address that the email message was sent from.</p>
426    #[serde(rename = "FromAddress")]
427    #[serde(skip_serializing_if = "Option::is_none")]
428    pub from_address: Option<String>,
429    /// <p>The URL of an image that contains a snapshot of the email message that was sent.</p>
430    #[serde(rename = "ImageUrl")]
431    #[serde(skip_serializing_if = "Option::is_none")]
432    pub image_url: Option<String>,
433    /// <p>The number of email messages that were delivered to recipients’ inboxes.</p>
434    #[serde(rename = "InboxCount")]
435    #[serde(skip_serializing_if = "Option::is_none")]
436    pub inbox_count: Option<i64>,
437    /// <p>The last time, in Unix time format, when the email message was delivered to any recipient's inbox. This value can help you determine how long it took for a campaign to deliver an email message.</p>
438    #[serde(rename = "LastSeenDateTime")]
439    #[serde(skip_serializing_if = "Option::is_none")]
440    pub last_seen_date_time: Option<f64>,
441    /// <p>The projected number of recipients that the email message was sent to.</p>
442    #[serde(rename = "ProjectedVolume")]
443    #[serde(skip_serializing_if = "Option::is_none")]
444    pub projected_volume: Option<i64>,
445    /// <p>The percentage of email messages that were opened and then deleted by recipients. Due to technical limitations, this value only includes recipients who opened the message by using an email client that supports images.</p>
446    #[serde(rename = "ReadDeleteRate")]
447    #[serde(skip_serializing_if = "Option::is_none")]
448    pub read_delete_rate: Option<f64>,
449    /// <p>The percentage of email messages that were opened by recipients. Due to technical limitations, this value only includes recipients who opened the message by using an email client that supports images.</p>
450    #[serde(rename = "ReadRate")]
451    #[serde(skip_serializing_if = "Option::is_none")]
452    pub read_rate: Option<f64>,
453    /// <p>The IP addresses that were used to send the email message.</p>
454    #[serde(rename = "SendingIps")]
455    #[serde(skip_serializing_if = "Option::is_none")]
456    pub sending_ips: Option<Vec<String>>,
457    /// <p>The number of email messages that were delivered to recipients' spam or junk mail folders.</p>
458    #[serde(rename = "SpamCount")]
459    #[serde(skip_serializing_if = "Option::is_none")]
460    pub spam_count: Option<i64>,
461    /// <p>The subject line, or title, of the email message.</p>
462    #[serde(rename = "Subject")]
463    #[serde(skip_serializing_if = "Option::is_none")]
464    pub subject: Option<String>,
465}
466
467/// <p>An object that contains information about the Deliverability dashboard subscription for a verified domain that you use to send email and currently has an active Deliverability dashboard subscription. If a Deliverability dashboard subscription is active for a domain, you gain access to reputation, inbox placement, and other metrics for the domain.</p>
468#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
469pub struct DomainDeliverabilityTrackingOption {
470    /// <p>A verified domain that’s associated with your AWS account and currently has an active Deliverability dashboard subscription.</p>
471    #[serde(rename = "Domain")]
472    #[serde(skip_serializing_if = "Option::is_none")]
473    pub domain: Option<String>,
474    /// <p>An object that contains information about the inbox placement data settings for the domain.</p>
475    #[serde(rename = "InboxPlacementTrackingOption")]
476    #[serde(skip_serializing_if = "Option::is_none")]
477    pub inbox_placement_tracking_option: Option<InboxPlacementTrackingOption>,
478    /// <p>The date, in Unix time format, when you enabled the Deliverability dashboard for the domain.</p>
479    #[serde(rename = "SubscriptionStartDate")]
480    #[serde(skip_serializing_if = "Option::is_none")]
481    pub subscription_start_date: Option<f64>,
482}
483
484/// <p>An object that contains inbox placement data for email sent from one of your email domains to a specific email provider.</p>
485#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
486#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
487pub struct DomainIspPlacement {
488    /// <p>The percentage of messages that were sent from the selected domain to the specified email provider that arrived in recipients' inboxes.</p>
489    #[serde(rename = "InboxPercentage")]
490    #[serde(skip_serializing_if = "Option::is_none")]
491    pub inbox_percentage: Option<f64>,
492    /// <p>The total number of messages that were sent from the selected domain to the specified email provider that arrived in recipients' inboxes.</p>
493    #[serde(rename = "InboxRawCount")]
494    #[serde(skip_serializing_if = "Option::is_none")]
495    pub inbox_raw_count: Option<i64>,
496    /// <p>The name of the email provider that the inbox placement data applies to.</p>
497    #[serde(rename = "IspName")]
498    #[serde(skip_serializing_if = "Option::is_none")]
499    pub isp_name: Option<String>,
500    /// <p>The percentage of messages that were sent from the selected domain to the specified email provider that arrived in recipients' spam or junk mail folders.</p>
501    #[serde(rename = "SpamPercentage")]
502    #[serde(skip_serializing_if = "Option::is_none")]
503    pub spam_percentage: Option<f64>,
504    /// <p>The total number of messages that were sent from the selected domain to the specified email provider that arrived in recipients' spam or junk mail folders.</p>
505    #[serde(rename = "SpamRawCount")]
506    #[serde(skip_serializing_if = "Option::is_none")]
507    pub spam_raw_count: Option<i64>,
508}
509
510/// <p>An object that defines the entire content of the email, including the message headers and the body content. You can create a simple email message, in which you specify the subject and the text and HTML versions of the message body. You can also create raw messages, in which you specify a complete MIME-formatted message. Raw messages can include attachments and custom headers.</p>
511#[derive(Clone, Debug, Default, PartialEq, Serialize)]
512#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
513pub struct EmailContent {
514    /// <p><p>The raw email message. The message has to meet the following criteria:</p> <ul> <li> <p>The message has to contain a header and a body, separated by one blank line.</p> </li> <li> <p>All of the required header fields must be present in the message.</p> </li> <li> <p>Each part of a multipart MIME message must be formatted properly.</p> </li> <li> <p>If you include attachments, they must be in a file format that Amazon Pinpoint supports. </p> </li> <li> <p>The entire message must be Base64 encoded.</p> </li> <li> <p>If any of the MIME parts in your message contain content that is outside of the 7-bit ASCII character range, you should encode that content to ensure that recipients&#39; email clients render the message properly.</p> </li> <li> <p>The length of any single line of text in the message can&#39;t exceed 1,000 characters. This restriction is defined in <a href="https://tools.ietf.org/html/rfc5321">RFC 5321</a>.</p> </li> </ul></p>
515    #[serde(rename = "Raw")]
516    #[serde(skip_serializing_if = "Option::is_none")]
517    pub raw: Option<RawMessage>,
518    /// <p>The simple email message. The message consists of a subject and a message body.</p>
519    #[serde(rename = "Simple")]
520    #[serde(skip_serializing_if = "Option::is_none")]
521    pub simple: Option<Message>,
522    /// <p>The template to use for the email message.</p>
523    #[serde(rename = "Template")]
524    #[serde(skip_serializing_if = "Option::is_none")]
525    pub template: Option<Template>,
526}
527
528/// <p>In Amazon Pinpoint, <i>events</i> include message sends, deliveries, opens, clicks, bounces, and complaints. <i>Event destinations</i> are places that you can send information about these events to. For example, you can send event data to Amazon SNS to receive notifications when you receive bounces or complaints, or you can use Amazon Kinesis Data Firehose to stream data to Amazon S3 for long-term storage.</p>
529#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
530#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
531pub struct EventDestination {
532    /// <p>An object that defines an Amazon CloudWatch destination for email events. You can use Amazon CloudWatch to monitor and gain insights on your email sending metrics.</p>
533    #[serde(rename = "CloudWatchDestination")]
534    #[serde(skip_serializing_if = "Option::is_none")]
535    pub cloud_watch_destination: Option<CloudWatchDestination>,
536    /// <p>If <code>true</code>, the event destination is enabled. When the event destination is enabled, the specified event types are sent to the destinations in this <code>EventDestinationDefinition</code>.</p> <p>If <code>false</code>, the event destination is disabled. When the event destination is disabled, events aren't sent to the specified destinations.</p>
537    #[serde(rename = "Enabled")]
538    #[serde(skip_serializing_if = "Option::is_none")]
539    pub enabled: Option<bool>,
540    /// <p>An object that defines an Amazon Kinesis Data Firehose destination for email events. You can use Amazon Kinesis Data Firehose to stream data to other services, such as Amazon S3 and Amazon Redshift.</p>
541    #[serde(rename = "KinesisFirehoseDestination")]
542    #[serde(skip_serializing_if = "Option::is_none")]
543    pub kinesis_firehose_destination: Option<KinesisFirehoseDestination>,
544    /// <p>The types of events that Amazon Pinpoint sends to the specified event destinations.</p>
545    #[serde(rename = "MatchingEventTypes")]
546    pub matching_event_types: Vec<String>,
547    /// <p>A name that identifies the event destination.</p>
548    #[serde(rename = "Name")]
549    pub name: String,
550    /// <p>An object that defines a Amazon Pinpoint destination for email events. You can use Amazon Pinpoint events to create attributes in Amazon Pinpoint projects. You can use these attributes to create segments for your campaigns.</p>
551    #[serde(rename = "PinpointDestination")]
552    #[serde(skip_serializing_if = "Option::is_none")]
553    pub pinpoint_destination: Option<PinpointDestination>,
554    /// <p>An object that defines an Amazon SNS destination for email events. You can use Amazon SNS to send notification when certain email events occur.</p>
555    #[serde(rename = "SnsDestination")]
556    #[serde(skip_serializing_if = "Option::is_none")]
557    pub sns_destination: Option<SnsDestination>,
558}
559
560/// <p>An object that defines the event destination. Specifically, it defines which services receive events from emails sent using the configuration set that the event destination is associated with. Also defines the types of events that are sent to the event destination.</p>
561#[derive(Clone, Debug, Default, PartialEq, Serialize)]
562#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
563pub struct EventDestinationDefinition {
564    /// <p>An object that defines an Amazon CloudWatch destination for email events. You can use Amazon CloudWatch to monitor and gain insights on your email sending metrics.</p>
565    #[serde(rename = "CloudWatchDestination")]
566    #[serde(skip_serializing_if = "Option::is_none")]
567    pub cloud_watch_destination: Option<CloudWatchDestination>,
568    /// <p>If <code>true</code>, the event destination is enabled. When the event destination is enabled, the specified event types are sent to the destinations in this <code>EventDestinationDefinition</code>.</p> <p>If <code>false</code>, the event destination is disabled. When the event destination is disabled, events aren't sent to the specified destinations.</p>
569    #[serde(rename = "Enabled")]
570    #[serde(skip_serializing_if = "Option::is_none")]
571    pub enabled: Option<bool>,
572    /// <p>An object that defines an Amazon Kinesis Data Firehose destination for email events. You can use Amazon Kinesis Data Firehose to stream data to other services, such as Amazon S3 and Amazon Redshift.</p>
573    #[serde(rename = "KinesisFirehoseDestination")]
574    #[serde(skip_serializing_if = "Option::is_none")]
575    pub kinesis_firehose_destination: Option<KinesisFirehoseDestination>,
576    /// <p>An array that specifies which events Amazon Pinpoint should send to the destinations in this <code>EventDestinationDefinition</code>.</p>
577    #[serde(rename = "MatchingEventTypes")]
578    #[serde(skip_serializing_if = "Option::is_none")]
579    pub matching_event_types: Option<Vec<String>>,
580    /// <p>An object that defines a Amazon Pinpoint destination for email events. You can use Amazon Pinpoint events to create attributes in Amazon Pinpoint projects. You can use these attributes to create segments for your campaigns.</p>
581    #[serde(rename = "PinpointDestination")]
582    #[serde(skip_serializing_if = "Option::is_none")]
583    pub pinpoint_destination: Option<PinpointDestination>,
584    /// <p>An object that defines an Amazon SNS destination for email events. You can use Amazon SNS to send notification when certain email events occur.</p>
585    #[serde(rename = "SnsDestination")]
586    #[serde(skip_serializing_if = "Option::is_none")]
587    pub sns_destination: Option<SnsDestination>,
588}
589
590/// <p>A request to obtain information about the email-sending capabilities of your Amazon Pinpoint account.</p>
591#[derive(Clone, Debug, Default, PartialEq, Serialize)]
592#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
593pub struct GetAccountRequest {}
594
595/// <p>A list of details about the email-sending capabilities of your Amazon Pinpoint account in the current AWS Region.</p>
596#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
597#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
598pub struct GetAccountResponse {
599    /// <p>Indicates whether or not the automatic warm-up feature is enabled for dedicated IP addresses that are associated with your account.</p>
600    #[serde(rename = "DedicatedIpAutoWarmupEnabled")]
601    #[serde(skip_serializing_if = "Option::is_none")]
602    pub dedicated_ip_auto_warmup_enabled: Option<bool>,
603    /// <p><p>The reputation status of your Amazon Pinpoint account. The status can be one of the following:</p> <ul> <li> <p> <code>HEALTHY</code> – There are no reputation-related issues that currently impact your account.</p> </li> <li> <p> <code>PROBATION</code> – We&#39;ve identified some issues with your Amazon Pinpoint account. We&#39;re placing your account under review while you work on correcting these issues.</p> </li> <li> <p> <code>SHUTDOWN</code> – Your account&#39;s ability to send email is currently paused because of an issue with the email sent from your account. When you correct the issue, you can contact us and request that your account&#39;s ability to send email is resumed.</p> </li> </ul></p>
604    #[serde(rename = "EnforcementStatus")]
605    #[serde(skip_serializing_if = "Option::is_none")]
606    pub enforcement_status: Option<String>,
607    /// <p>Indicates whether or not your account has production access in the current AWS Region.</p> <p>If the value is <code>false</code>, then your account is in the <i>sandbox</i>. When your account is in the sandbox, you can only send email to verified identities. Additionally, the maximum number of emails you can send in a 24-hour period (your sending quota) is 200, and the maximum number of emails you can send per second (your maximum sending rate) is 1.</p> <p>If the value is <code>true</code>, then your account has production access. When your account has production access, you can send email to any address. The sending quota and maximum sending rate for your account vary based on your specific use case.</p>
608    #[serde(rename = "ProductionAccessEnabled")]
609    #[serde(skip_serializing_if = "Option::is_none")]
610    pub production_access_enabled: Option<bool>,
611    /// <p>An object that contains information about the per-day and per-second sending limits for your Amazon Pinpoint account in the current AWS Region.</p>
612    #[serde(rename = "SendQuota")]
613    #[serde(skip_serializing_if = "Option::is_none")]
614    pub send_quota: Option<SendQuota>,
615    /// <p>Indicates whether or not email sending is enabled for your Amazon Pinpoint account in the current AWS Region.</p>
616    #[serde(rename = "SendingEnabled")]
617    #[serde(skip_serializing_if = "Option::is_none")]
618    pub sending_enabled: Option<bool>,
619}
620
621/// <p>A request to retrieve a list of the blacklists that your dedicated IP addresses appear on.</p>
622#[derive(Clone, Debug, Default, PartialEq, Serialize)]
623#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
624pub struct GetBlacklistReportsRequest {
625    /// <p>A list of IP addresses that you want to retrieve blacklist information about. You can only specify the dedicated IP addresses that you use to send email using Amazon Pinpoint or Amazon SES.</p>
626    #[serde(rename = "BlacklistItemNames")]
627    pub blacklist_item_names: Vec<String>,
628}
629
630/// <p>An object that contains information about blacklist events.</p>
631#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
632#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
633pub struct GetBlacklistReportsResponse {
634    /// <p>An object that contains information about a blacklist that one of your dedicated IP addresses appears on.</p>
635    #[serde(rename = "BlacklistReport")]
636    pub blacklist_report: ::std::collections::HashMap<String, Vec<BlacklistEntry>>,
637}
638
639/// <p>A request to obtain information about the event destinations for a configuration set.</p>
640#[derive(Clone, Debug, Default, PartialEq, Serialize)]
641#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
642pub struct GetConfigurationSetEventDestinationsRequest {
643    /// <p>The name of the configuration set that contains the event destination.</p>
644    #[serde(rename = "ConfigurationSetName")]
645    pub configuration_set_name: String,
646}
647
648/// <p>Information about an event destination for a configuration set.</p>
649#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
650#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
651pub struct GetConfigurationSetEventDestinationsResponse {
652    /// <p>An array that includes all of the events destinations that have been configured for the configuration set.</p>
653    #[serde(rename = "EventDestinations")]
654    #[serde(skip_serializing_if = "Option::is_none")]
655    pub event_destinations: Option<Vec<EventDestination>>,
656}
657
658/// <p>A request to obtain information about a configuration set.</p>
659#[derive(Clone, Debug, Default, PartialEq, Serialize)]
660#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
661pub struct GetConfigurationSetRequest {
662    /// <p>The name of the configuration set that you want to obtain more information about.</p>
663    #[serde(rename = "ConfigurationSetName")]
664    pub configuration_set_name: String,
665}
666
667/// <p>Information about a configuration set.</p>
668#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
669#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
670pub struct GetConfigurationSetResponse {
671    /// <p>The name of the configuration set.</p>
672    #[serde(rename = "ConfigurationSetName")]
673    #[serde(skip_serializing_if = "Option::is_none")]
674    pub configuration_set_name: Option<String>,
675    /// <p>An object that defines the dedicated IP pool that is used to send emails that you send using the configuration set.</p>
676    #[serde(rename = "DeliveryOptions")]
677    #[serde(skip_serializing_if = "Option::is_none")]
678    pub delivery_options: Option<DeliveryOptions>,
679    /// <p>An object that defines whether or not Amazon Pinpoint collects reputation metrics for the emails that you send that use the configuration set.</p>
680    #[serde(rename = "ReputationOptions")]
681    #[serde(skip_serializing_if = "Option::is_none")]
682    pub reputation_options: Option<ReputationOptions>,
683    /// <p>An object that defines whether or not Amazon Pinpoint can send email that you send using the configuration set.</p>
684    #[serde(rename = "SendingOptions")]
685    #[serde(skip_serializing_if = "Option::is_none")]
686    pub sending_options: Option<SendingOptions>,
687    /// <p>An array of objects that define the tags (keys and values) that are associated with the configuration set.</p>
688    #[serde(rename = "Tags")]
689    #[serde(skip_serializing_if = "Option::is_none")]
690    pub tags: Option<Vec<Tag>>,
691    /// <p>An object that defines the open and click tracking options for emails that you send using the configuration set.</p>
692    #[serde(rename = "TrackingOptions")]
693    #[serde(skip_serializing_if = "Option::is_none")]
694    pub tracking_options: Option<TrackingOptions>,
695}
696
697/// <p>A request to obtain more information about a dedicated IP address.</p>
698#[derive(Clone, Debug, Default, PartialEq, Serialize)]
699#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
700pub struct GetDedicatedIpRequest {
701    /// <p>The IP address that you want to obtain more information about. The value you specify has to be a dedicated IP address that's assocaited with your Amazon Pinpoint account.</p>
702    #[serde(rename = "Ip")]
703    pub ip: String,
704}
705
706/// <p>Information about a dedicated IP address.</p>
707#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
708#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
709pub struct GetDedicatedIpResponse {
710    /// <p>An object that contains information about a dedicated IP address.</p>
711    #[serde(rename = "DedicatedIp")]
712    #[serde(skip_serializing_if = "Option::is_none")]
713    pub dedicated_ip: Option<DedicatedIp>,
714}
715
716/// <p>A request to obtain more information about dedicated IP pools.</p>
717#[derive(Clone, Debug, Default, PartialEq, Serialize)]
718#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
719pub struct GetDedicatedIpsRequest {
720    /// <p>A token returned from a previous call to <code>GetDedicatedIps</code> to indicate the position of the dedicated IP pool in the list of IP pools.</p>
721    #[serde(rename = "NextToken")]
722    #[serde(skip_serializing_if = "Option::is_none")]
723    pub next_token: Option<String>,
724    /// <p>The number of results to show in a single call to <code>GetDedicatedIpsRequest</code>. If the number of results is larger than the number you specified in this parameter, then the response includes a <code>NextToken</code> element, which you can use to obtain additional results.</p>
725    #[serde(rename = "PageSize")]
726    #[serde(skip_serializing_if = "Option::is_none")]
727    pub page_size: Option<i64>,
728    /// <p>The name of the IP pool that the dedicated IP address is associated with.</p>
729    #[serde(rename = "PoolName")]
730    #[serde(skip_serializing_if = "Option::is_none")]
731    pub pool_name: Option<String>,
732}
733
734/// <p>Information about the dedicated IP addresses that are associated with your Amazon Pinpoint account.</p>
735#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
736#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
737pub struct GetDedicatedIpsResponse {
738    /// <p>A list of dedicated IP addresses that are reserved for use by your Amazon Pinpoint account.</p>
739    #[serde(rename = "DedicatedIps")]
740    #[serde(skip_serializing_if = "Option::is_none")]
741    pub dedicated_ips: Option<Vec<DedicatedIp>>,
742    /// <p>A token that indicates that there are additional dedicated IP addresses to list. To view additional addresses, issue another request to <code>GetDedicatedIps</code>, passing this token in the <code>NextToken</code> parameter.</p>
743    #[serde(rename = "NextToken")]
744    #[serde(skip_serializing_if = "Option::is_none")]
745    pub next_token: Option<String>,
746}
747
748/// <p>Retrieve information about the status of the Deliverability dashboard for your Amazon Pinpoint account. When the Deliverability dashboard is enabled, you gain access to reputation, deliverability, and other metrics for the domains that you use to send email using Amazon Pinpoint. You also gain the ability to perform predictive inbox placement tests.</p> <p>When you use the Deliverability dashboard, you pay a monthly subscription charge, in addition to any other fees that you accrue by using Amazon Pinpoint. For more information about the features and cost of a Deliverability dashboard subscription, see <a href="http://aws.amazon.com/pinpoint/pricing/">Amazon Pinpoint Pricing</a>.</p>
749#[derive(Clone, Debug, Default, PartialEq, Serialize)]
750#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
751pub struct GetDeliverabilityDashboardOptionsRequest {}
752
753/// <p>An object that shows the status of the Deliverability dashboard for your Amazon Pinpoint account.</p>
754#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
755#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
756pub struct GetDeliverabilityDashboardOptionsResponse {
757    /// <p>The current status of your Deliverability dashboard subscription. If this value is <code>PENDING_EXPIRATION</code>, your subscription is scheduled to expire at the end of the current calendar month.</p>
758    #[serde(rename = "AccountStatus")]
759    #[serde(skip_serializing_if = "Option::is_none")]
760    pub account_status: Option<String>,
761    /// <p>An array of objects, one for each verified domain that you use to send email and currently has an active Deliverability dashboard subscription that isn’t scheduled to expire at the end of the current calendar month.</p>
762    #[serde(rename = "ActiveSubscribedDomains")]
763    #[serde(skip_serializing_if = "Option::is_none")]
764    pub active_subscribed_domains: Option<Vec<DomainDeliverabilityTrackingOption>>,
765    /// <p>Specifies whether the Deliverability dashboard is enabled for your Amazon Pinpoint account. If this value is <code>true</code>, the dashboard is enabled.</p>
766    #[serde(rename = "DashboardEnabled")]
767    pub dashboard_enabled: bool,
768    /// <p>An array of objects, one for each verified domain that you use to send email and currently has an active Deliverability dashboard subscription that's scheduled to expire at the end of the current calendar month.</p>
769    #[serde(rename = "PendingExpirationSubscribedDomains")]
770    #[serde(skip_serializing_if = "Option::is_none")]
771    pub pending_expiration_subscribed_domains: Option<Vec<DomainDeliverabilityTrackingOption>>,
772    /// <p>The date, in Unix time format, when your current subscription to the Deliverability dashboard is scheduled to expire, if your subscription is scheduled to expire at the end of the current calendar month. This value is null if you have an active subscription that isn’t due to expire at the end of the month.</p>
773    #[serde(rename = "SubscriptionExpiryDate")]
774    #[serde(skip_serializing_if = "Option::is_none")]
775    pub subscription_expiry_date: Option<f64>,
776}
777
778/// <p>A request to retrieve the results of a predictive inbox placement test.</p>
779#[derive(Clone, Debug, Default, PartialEq, Serialize)]
780#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
781pub struct GetDeliverabilityTestReportRequest {
782    /// <p>A unique string that identifies the predictive inbox placement test.</p>
783    #[serde(rename = "ReportId")]
784    pub report_id: String,
785}
786
787/// <p>The results of the predictive inbox placement test.</p>
788#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
789#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
790pub struct GetDeliverabilityTestReportResponse {
791    /// <p>An object that contains the results of the predictive inbox placement test.</p>
792    #[serde(rename = "DeliverabilityTestReport")]
793    pub deliverability_test_report: DeliverabilityTestReport,
794    /// <p>An object that describes how the test email was handled by several email providers, including Gmail, Hotmail, Yahoo, AOL, and others.</p>
795    #[serde(rename = "IspPlacements")]
796    pub isp_placements: Vec<IspPlacement>,
797    /// <p>An object that contains the message that you sent when you performed this predictive inbox placement test.</p>
798    #[serde(rename = "Message")]
799    #[serde(skip_serializing_if = "Option::is_none")]
800    pub message: Option<String>,
801    /// <p>An object that specifies how many test messages that were sent during the predictive inbox placement test were delivered to recipients' inboxes, how many were sent to recipients' spam folders, and how many weren't delivered.</p>
802    #[serde(rename = "OverallPlacement")]
803    pub overall_placement: PlacementStatistics,
804    /// <p>An array of objects that define the tags (keys and values) that are associated with the predictive inbox placement test.</p>
805    #[serde(rename = "Tags")]
806    #[serde(skip_serializing_if = "Option::is_none")]
807    pub tags: Option<Vec<Tag>>,
808}
809
810/// <p>Retrieve all the deliverability data for a specific campaign. This data is available for a campaign only if the campaign sent email by using a domain that the Deliverability dashboard is enabled for (<code>PutDeliverabilityDashboardOption</code> operation).</p>
811#[derive(Clone, Debug, Default, PartialEq, Serialize)]
812#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
813pub struct GetDomainDeliverabilityCampaignRequest {
814    /// <p>The unique identifier for the campaign. Amazon Pinpoint automatically generates and assigns this identifier to a campaign. This value is not the same as the campaign identifier that Amazon Pinpoint assigns to campaigns that you create and manage by using the Amazon Pinpoint API or the Amazon Pinpoint console.</p>
815    #[serde(rename = "CampaignId")]
816    pub campaign_id: String,
817}
818
819/// <p>An object that contains all the deliverability data for a specific campaign. This data is available for a campaign only if the campaign sent email by using a domain that the Deliverability dashboard is enabled for (<code>PutDeliverabilityDashboardOption</code> operation).</p>
820#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
821#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
822pub struct GetDomainDeliverabilityCampaignResponse {
823    /// <p>An object that contains the deliverability data for the campaign.</p>
824    #[serde(rename = "DomainDeliverabilityCampaign")]
825    pub domain_deliverability_campaign: DomainDeliverabilityCampaign,
826}
827
828/// <p>A request to obtain deliverability metrics for a domain.</p>
829#[derive(Clone, Debug, Default, PartialEq, Serialize)]
830#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
831pub struct GetDomainStatisticsReportRequest {
832    /// <p>The domain that you want to obtain deliverability metrics for.</p>
833    #[serde(rename = "Domain")]
834    pub domain: String,
835    /// <p>The last day (in Unix time) that you want to obtain domain deliverability metrics for. The <code>EndDate</code> that you specify has to be less than or equal to 30 days after the <code>StartDate</code>.</p>
836    #[serde(rename = "EndDate")]
837    pub end_date: f64,
838    /// <p>The first day (in Unix time) that you want to obtain domain deliverability metrics for.</p>
839    #[serde(rename = "StartDate")]
840    pub start_date: f64,
841}
842
843/// <p>An object that includes statistics that are related to the domain that you specified.</p>
844#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
845#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
846pub struct GetDomainStatisticsReportResponse {
847    /// <p>An object that contains deliverability metrics for the domain that you specified. This object contains data for each day, starting on the <code>StartDate</code> and ending on the <code>EndDate</code>.</p>
848    #[serde(rename = "DailyVolumes")]
849    pub daily_volumes: Vec<DailyVolume>,
850    /// <p>An object that contains deliverability metrics for the domain that you specified. The data in this object is a summary of all of the data that was collected from the <code>StartDate</code> to the <code>EndDate</code>.</p>
851    #[serde(rename = "OverallVolume")]
852    pub overall_volume: OverallVolume,
853}
854
855/// <p>A request to return details about an email identity.</p>
856#[derive(Clone, Debug, Default, PartialEq, Serialize)]
857#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
858pub struct GetEmailIdentityRequest {
859    /// <p>The email identity that you want to retrieve details for.</p>
860    #[serde(rename = "EmailIdentity")]
861    pub email_identity: String,
862}
863
864/// <p>Details about an email identity.</p>
865#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
866#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
867pub struct GetEmailIdentityResponse {
868    /// <p>An object that contains information about the DKIM attributes for the identity. This object includes the tokens that you use to create the CNAME records that are required to complete the DKIM verification process.</p>
869    #[serde(rename = "DkimAttributes")]
870    #[serde(skip_serializing_if = "Option::is_none")]
871    pub dkim_attributes: Option<DkimAttributes>,
872    /// <p>The feedback forwarding configuration for the identity.</p> <p>If the value is <code>true</code>, Amazon Pinpoint sends you email notifications when bounce or complaint events occur. Amazon Pinpoint sends this notification to the address that you specified in the Return-Path header of the original email.</p> <p>When you set this value to <code>false</code>, Amazon Pinpoint sends notifications through other mechanisms, such as by notifying an Amazon SNS topic or another event destination. You're required to have a method of tracking bounces and complaints. If you haven't set up another mechanism for receiving bounce or complaint notifications, Amazon Pinpoint sends an email notification when these events occur (even if this setting is disabled).</p>
873    #[serde(rename = "FeedbackForwardingStatus")]
874    #[serde(skip_serializing_if = "Option::is_none")]
875    pub feedback_forwarding_status: Option<bool>,
876    /// <p>The email identity type.</p>
877    #[serde(rename = "IdentityType")]
878    #[serde(skip_serializing_if = "Option::is_none")]
879    pub identity_type: Option<String>,
880    /// <p>An object that contains information about the Mail-From attributes for the email identity.</p>
881    #[serde(rename = "MailFromAttributes")]
882    #[serde(skip_serializing_if = "Option::is_none")]
883    pub mail_from_attributes: Option<MailFromAttributes>,
884    /// <p>An array of objects that define the tags (keys and values) that are associated with the email identity.</p>
885    #[serde(rename = "Tags")]
886    #[serde(skip_serializing_if = "Option::is_none")]
887    pub tags: Option<Vec<Tag>>,
888    /// <p>Specifies whether or not the identity is verified. In Amazon Pinpoint, you can only send email from verified email addresses or domains. For more information about verifying identities, see the <a href="https://docs.aws.amazon.com/pinpoint/latest/userguide/channels-email-manage-verify.html">Amazon Pinpoint User Guide</a>.</p>
889    #[serde(rename = "VerifiedForSendingStatus")]
890    #[serde(skip_serializing_if = "Option::is_none")]
891    pub verified_for_sending_status: Option<bool>,
892}
893
894/// <p>Information about an email identity.</p>
895#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
896#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
897pub struct IdentityInfo {
898    /// <p>The address or domain of the identity.</p>
899    #[serde(rename = "IdentityName")]
900    #[serde(skip_serializing_if = "Option::is_none")]
901    pub identity_name: Option<String>,
902    /// <p><p>The email identity type. The identity type can be one of the following:</p> <ul> <li> <p> <code>EMAIL<em>ADDRESS</code> – The identity is an email address.</p> </li> <li> <p> <code>DOMAIN</code> – The identity is a domain.</p> </li> <li> <p> <code>MANAGED</em>DOMAIN</code> – The identity is a domain that is managed by AWS.</p> </li> </ul></p>
903    #[serde(rename = "IdentityType")]
904    #[serde(skip_serializing_if = "Option::is_none")]
905    pub identity_type: Option<String>,
906    /// <p>Indicates whether or not you can send email from the identity.</p> <p>In Amazon Pinpoint, an identity is an email address or domain that you send email from. Before you can send email from an identity, you have to demostrate that you own the identity, and that you authorize Amazon Pinpoint to send email from that identity.</p>
907    #[serde(rename = "SendingEnabled")]
908    #[serde(skip_serializing_if = "Option::is_none")]
909    pub sending_enabled: Option<bool>,
910}
911
912/// <p>An object that contains information about the inbox placement data settings for a verified domain that’s associated with your AWS account. This data is available only if you enabled the Deliverability dashboard for the domain (<code>PutDeliverabilityDashboardOption</code> operation).</p>
913#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
914pub struct InboxPlacementTrackingOption {
915    /// <p>Specifies whether inbox placement data is being tracked for the domain.</p>
916    #[serde(rename = "Global")]
917    #[serde(skip_serializing_if = "Option::is_none")]
918    pub global: Option<bool>,
919    /// <p>An array of strings, one for each major email provider that the inbox placement data applies to.</p>
920    #[serde(rename = "TrackedIsps")]
921    #[serde(skip_serializing_if = "Option::is_none")]
922    pub tracked_isps: Option<Vec<String>>,
923}
924
925/// <p>An object that describes how email sent during the predictive inbox placement test was handled by a certain email provider.</p>
926#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
927#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
928pub struct IspPlacement {
929    /// <p>The name of the email provider that the inbox placement data applies to.</p>
930    #[serde(rename = "IspName")]
931    #[serde(skip_serializing_if = "Option::is_none")]
932    pub isp_name: Option<String>,
933    /// <p>An object that contains inbox placement metrics for a specific email provider.</p>
934    #[serde(rename = "PlacementStatistics")]
935    #[serde(skip_serializing_if = "Option::is_none")]
936    pub placement_statistics: Option<PlacementStatistics>,
937}
938
939/// <p>An object that defines an Amazon Kinesis Data Firehose destination for email events. You can use Amazon Kinesis Data Firehose to stream data to other services, such as Amazon S3 and Amazon Redshift.</p>
940#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
941pub struct KinesisFirehoseDestination {
942    /// <p>The Amazon Resource Name (ARN) of the Amazon Kinesis Data Firehose stream that Amazon Pinpoint sends email events to.</p>
943    #[serde(rename = "DeliveryStreamArn")]
944    pub delivery_stream_arn: String,
945    /// <p>The Amazon Resource Name (ARN) of the IAM role that Amazon Pinpoint uses when sending email events to the Amazon Kinesis Data Firehose stream.</p>
946    #[serde(rename = "IamRoleArn")]
947    pub iam_role_arn: String,
948}
949
950/// <p>A request to obtain a list of configuration sets for your Amazon Pinpoint account in the current AWS Region.</p>
951#[derive(Clone, Debug, Default, PartialEq, Serialize)]
952#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
953pub struct ListConfigurationSetsRequest {
954    /// <p>A token returned from a previous call to <code>ListConfigurationSets</code> to indicate the position in the list of configuration sets.</p>
955    #[serde(rename = "NextToken")]
956    #[serde(skip_serializing_if = "Option::is_none")]
957    pub next_token: Option<String>,
958    /// <p>The number of results to show in a single call to <code>ListConfigurationSets</code>. If the number of results is larger than the number you specified in this parameter, then the response includes a <code>NextToken</code> element, which you can use to obtain additional results.</p>
959    #[serde(rename = "PageSize")]
960    #[serde(skip_serializing_if = "Option::is_none")]
961    pub page_size: Option<i64>,
962}
963
964/// <p>A list of configuration sets in your Amazon Pinpoint account in the current AWS Region.</p>
965#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
966#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
967pub struct ListConfigurationSetsResponse {
968    /// <p>An array that contains all of the configuration sets in your Amazon Pinpoint account in the current AWS Region.</p>
969    #[serde(rename = "ConfigurationSets")]
970    #[serde(skip_serializing_if = "Option::is_none")]
971    pub configuration_sets: Option<Vec<String>>,
972    /// <p>A token that indicates that there are additional configuration sets to list. To view additional configuration sets, issue another request to <code>ListConfigurationSets</code>, and pass this token in the <code>NextToken</code> parameter.</p>
973    #[serde(rename = "NextToken")]
974    #[serde(skip_serializing_if = "Option::is_none")]
975    pub next_token: Option<String>,
976}
977
978/// <p>A request to obtain a list of dedicated IP pools.</p>
979#[derive(Clone, Debug, Default, PartialEq, Serialize)]
980#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
981pub struct ListDedicatedIpPoolsRequest {
982    /// <p>A token returned from a previous call to <code>ListDedicatedIpPools</code> to indicate the position in the list of dedicated IP pools.</p>
983    #[serde(rename = "NextToken")]
984    #[serde(skip_serializing_if = "Option::is_none")]
985    pub next_token: Option<String>,
986    /// <p>The number of results to show in a single call to <code>ListDedicatedIpPools</code>. If the number of results is larger than the number you specified in this parameter, then the response includes a <code>NextToken</code> element, which you can use to obtain additional results.</p>
987    #[serde(rename = "PageSize")]
988    #[serde(skip_serializing_if = "Option::is_none")]
989    pub page_size: Option<i64>,
990}
991
992/// <p>A list of dedicated IP pools.</p>
993#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
994#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
995pub struct ListDedicatedIpPoolsResponse {
996    /// <p>A list of all of the dedicated IP pools that are associated with your Amazon Pinpoint account.</p>
997    #[serde(rename = "DedicatedIpPools")]
998    #[serde(skip_serializing_if = "Option::is_none")]
999    pub dedicated_ip_pools: Option<Vec<String>>,
1000    /// <p>A token that indicates that there are additional IP pools to list. To view additional IP pools, issue another request to <code>ListDedicatedIpPools</code>, passing this token in the <code>NextToken</code> parameter.</p>
1001    #[serde(rename = "NextToken")]
1002    #[serde(skip_serializing_if = "Option::is_none")]
1003    pub next_token: Option<String>,
1004}
1005
1006/// <p>A request to list all of the predictive inbox placement tests that you've performed.</p>
1007#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1008#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1009pub struct ListDeliverabilityTestReportsRequest {
1010    /// <p>A token returned from a previous call to <code>ListDeliverabilityTestReports</code> to indicate the position in the list of predictive inbox placement tests.</p>
1011    #[serde(rename = "NextToken")]
1012    #[serde(skip_serializing_if = "Option::is_none")]
1013    pub next_token: Option<String>,
1014    /// <p>The number of results to show in a single call to <code>ListDeliverabilityTestReports</code>. If the number of results is larger than the number you specified in this parameter, then the response includes a <code>NextToken</code> element, which you can use to obtain additional results.</p> <p>The value you specify has to be at least 0, and can be no more than 1000.</p>
1015    #[serde(rename = "PageSize")]
1016    #[serde(skip_serializing_if = "Option::is_none")]
1017    pub page_size: Option<i64>,
1018}
1019
1020/// <p>A list of the predictive inbox placement test reports that are available for your account, regardless of whether or not those tests are complete.</p>
1021#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1022#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1023pub struct ListDeliverabilityTestReportsResponse {
1024    /// <p>An object that contains a lists of predictive inbox placement tests that you've performed.</p>
1025    #[serde(rename = "DeliverabilityTestReports")]
1026    pub deliverability_test_reports: Vec<DeliverabilityTestReport>,
1027    /// <p>A token that indicates that there are additional predictive inbox placement tests to list. To view additional predictive inbox placement tests, issue another request to <code>ListDeliverabilityTestReports</code>, and pass this token in the <code>NextToken</code> parameter.</p>
1028    #[serde(rename = "NextToken")]
1029    #[serde(skip_serializing_if = "Option::is_none")]
1030    pub next_token: Option<String>,
1031}
1032
1033/// <p>Retrieve deliverability data for all the campaigns that used a specific domain to send email during a specified time range. This data is available for a domain only if you enabled the Deliverability dashboard (<code>PutDeliverabilityDashboardOption</code> operation) for the domain.</p>
1034#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1035#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1036pub struct ListDomainDeliverabilityCampaignsRequest {
1037    /// <p>The last day, in Unix time format, that you want to obtain deliverability data for. This value has to be less than or equal to 30 days after the value of the <code>StartDate</code> parameter.</p>
1038    #[serde(rename = "EndDate")]
1039    pub end_date: f64,
1040    /// <p>A token that’s returned from a previous call to the <code>ListDomainDeliverabilityCampaigns</code> operation. This token indicates the position of a campaign in the list of campaigns.</p>
1041    #[serde(rename = "NextToken")]
1042    #[serde(skip_serializing_if = "Option::is_none")]
1043    pub next_token: Option<String>,
1044    /// <p>The maximum number of results to include in response to a single call to the <code>ListDomainDeliverabilityCampaigns</code> operation. If the number of results is larger than the number that you specify in this parameter, the response includes a <code>NextToken</code> element, which you can use to obtain additional results.</p>
1045    #[serde(rename = "PageSize")]
1046    #[serde(skip_serializing_if = "Option::is_none")]
1047    pub page_size: Option<i64>,
1048    /// <p>The first day, in Unix time format, that you want to obtain deliverability data for.</p>
1049    #[serde(rename = "StartDate")]
1050    pub start_date: f64,
1051    /// <p>The domain to obtain deliverability data for.</p>
1052    #[serde(rename = "SubscribedDomain")]
1053    pub subscribed_domain: String,
1054}
1055
1056/// <p>An array of objects that provide deliverability data for all the campaigns that used a specific domain to send email during a specified time range. This data is available for a domain only if you enabled the Deliverability dashboard (<code>PutDeliverabilityDashboardOption</code> operation) for the domain.</p>
1057#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1058#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1059pub struct ListDomainDeliverabilityCampaignsResponse {
1060    /// <p>An array of responses, one for each campaign that used the domain to send email during the specified time range.</p>
1061    #[serde(rename = "DomainDeliverabilityCampaigns")]
1062    pub domain_deliverability_campaigns: Vec<DomainDeliverabilityCampaign>,
1063    /// <p>A token that’s returned from a previous call to the <code>ListDomainDeliverabilityCampaigns</code> operation. This token indicates the position of the campaign in the list of campaigns.</p>
1064    #[serde(rename = "NextToken")]
1065    #[serde(skip_serializing_if = "Option::is_none")]
1066    pub next_token: Option<String>,
1067}
1068
1069/// <p>A request to list all of the email identities associated with your Amazon Pinpoint account. This list includes identities that you've already verified, identities that are unverified, and identities that were verified in the past, but are no longer verified.</p>
1070#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1071#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1072pub struct ListEmailIdentitiesRequest {
1073    /// <p>A token returned from a previous call to <code>ListEmailIdentities</code> to indicate the position in the list of identities.</p>
1074    #[serde(rename = "NextToken")]
1075    #[serde(skip_serializing_if = "Option::is_none")]
1076    pub next_token: Option<String>,
1077    /// <p>The number of results to show in a single call to <code>ListEmailIdentities</code>. If the number of results is larger than the number you specified in this parameter, then the response includes a <code>NextToken</code> element, which you can use to obtain additional results.</p> <p>The value you specify has to be at least 0, and can be no more than 1000.</p>
1078    #[serde(rename = "PageSize")]
1079    #[serde(skip_serializing_if = "Option::is_none")]
1080    pub page_size: Option<i64>,
1081}
1082
1083/// <p>A list of all of the identities that you've attempted to verify for use with Amazon Pinpoint, regardless of whether or not those identities were successfully verified.</p>
1084#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1085#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1086pub struct ListEmailIdentitiesResponse {
1087    /// <p>An array that includes all of the identities associated with your Amazon Pinpoint account.</p>
1088    #[serde(rename = "EmailIdentities")]
1089    #[serde(skip_serializing_if = "Option::is_none")]
1090    pub email_identities: Option<Vec<IdentityInfo>>,
1091    /// <p>A token that indicates that there are additional configuration sets to list. To view additional configuration sets, issue another request to <code>ListEmailIdentities</code>, and pass this token in the <code>NextToken</code> parameter.</p>
1092    #[serde(rename = "NextToken")]
1093    #[serde(skip_serializing_if = "Option::is_none")]
1094    pub next_token: Option<String>,
1095}
1096
1097#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1098#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1099pub struct ListTagsForResourceRequest {
1100    /// <p>The Amazon Resource Name (ARN) of the resource that you want to retrieve tag information for.</p>
1101    #[serde(rename = "ResourceArn")]
1102    pub resource_arn: String,
1103}
1104
1105#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1106#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1107pub struct ListTagsForResourceResponse {
1108    /// <p>An array that lists all the tags that are associated with the resource. Each tag consists of a required tag key (<code>Key</code>) and an associated tag value (<code>Value</code>)</p>
1109    #[serde(rename = "Tags")]
1110    pub tags: Vec<Tag>,
1111}
1112
1113/// <p>A list of attributes that are associated with a MAIL FROM domain.</p>
1114#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1115#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1116pub struct MailFromAttributes {
1117    /// <p>The action that Amazon Pinpoint to takes if it can't read the required MX record for a custom MAIL FROM domain. When you set this value to <code>UseDefaultValue</code>, Amazon Pinpoint uses <i>amazonses.com</i> as the MAIL FROM domain. When you set this value to <code>RejectMessage</code>, Amazon Pinpoint returns a <code>MailFromDomainNotVerified</code> error, and doesn't attempt to deliver the email.</p> <p>These behaviors are taken when the custom MAIL FROM domain configuration is in the <code>Pending</code>, <code>Failed</code>, and <code>TemporaryFailure</code> states.</p>
1118    #[serde(rename = "BehaviorOnMxFailure")]
1119    pub behavior_on_mx_failure: String,
1120    /// <p>The name of a domain that an email identity uses as a custom MAIL FROM domain.</p>
1121    #[serde(rename = "MailFromDomain")]
1122    pub mail_from_domain: String,
1123    /// <p><p>The status of the MAIL FROM domain. This status can have the following values:</p> <ul> <li> <p> <code>PENDING</code> – Amazon Pinpoint hasn&#39;t started searching for the MX record yet.</p> </li> <li> <p> <code>SUCCESS</code> – Amazon Pinpoint detected the required MX record for the MAIL FROM domain.</p> </li> <li> <p> <code>FAILED</code> – Amazon Pinpoint can&#39;t find the required MX record, or the record no longer exists.</p> </li> <li> <p> <code>TEMPORARY_FAILURE</code> – A temporary issue occurred, which prevented Amazon Pinpoint from determining the status of the MAIL FROM domain.</p> </li> </ul></p>
1124    #[serde(rename = "MailFromDomainStatus")]
1125    pub mail_from_domain_status: String,
1126}
1127
1128/// <p>Represents the email message that you're sending. The <code>Message</code> object consists of a subject line and a message body.</p>
1129#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1130#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1131pub struct Message {
1132    /// <p>The body of the message. You can specify an HTML version of the message, a text-only version of the message, or both.</p>
1133    #[serde(rename = "Body")]
1134    pub body: Body,
1135    /// <p>The subject line of the email. The subject line can only contain 7-bit ASCII characters. However, you can specify non-ASCII characters in the subject line by using encoded-word syntax, as described in <a href="https://tools.ietf.org/html/rfc2047">RFC 2047</a>.</p>
1136    #[serde(rename = "Subject")]
1137    pub subject: Content,
1138}
1139
1140/// <p>Contains the name and value of a tag that you apply to an email. You can use message tags when you publish email sending events. </p>
1141#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1142#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1143pub struct MessageTag {
1144    /// <p><p>The name of the message tag. The message tag name has to meet the following criteria:</p> <ul> <li> <p>It can only contain ASCII letters (a–z, A–Z), numbers (0–9), underscores (_), or dashes (-).</p> </li> <li> <p>It can contain no more than 256 characters.</p> </li> </ul></p>
1145    #[serde(rename = "Name")]
1146    pub name: String,
1147    /// <p><p>The value of the message tag. The message tag value has to meet the following criteria:</p> <ul> <li> <p>It can only contain ASCII letters (a–z, A–Z), numbers (0–9), underscores (_), or dashes (-).</p> </li> <li> <p>It can contain no more than 256 characters.</p> </li> </ul></p>
1148    #[serde(rename = "Value")]
1149    pub value: String,
1150}
1151
1152/// <p>An object that contains information about email that was sent from the selected domain.</p>
1153#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1154#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1155pub struct OverallVolume {
1156    /// <p>An object that contains inbox and junk mail placement metrics for individual email providers.</p>
1157    #[serde(rename = "DomainIspPlacements")]
1158    #[serde(skip_serializing_if = "Option::is_none")]
1159    pub domain_isp_placements: Option<Vec<DomainIspPlacement>>,
1160    /// <p>The percentage of emails that were sent from the domain that were read by their recipients.</p>
1161    #[serde(rename = "ReadRatePercent")]
1162    #[serde(skip_serializing_if = "Option::is_none")]
1163    pub read_rate_percent: Option<f64>,
1164    /// <p>An object that contains information about the numbers of messages that arrived in recipients' inboxes and junk mail folders.</p>
1165    #[serde(rename = "VolumeStatistics")]
1166    #[serde(skip_serializing_if = "Option::is_none")]
1167    pub volume_statistics: Option<VolumeStatistics>,
1168}
1169
1170/// <p>An object that defines a Amazon Pinpoint destination for email events. You can use Amazon Pinpoint events to create attributes in Amazon Pinpoint projects. You can use these attributes to create segments for your campaigns.</p>
1171#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1172pub struct PinpointDestination {
1173    /// <p>The Amazon Resource Name (ARN) of the Amazon Pinpoint project that you want to send email events to.</p>
1174    #[serde(rename = "ApplicationArn")]
1175    #[serde(skip_serializing_if = "Option::is_none")]
1176    pub application_arn: Option<String>,
1177}
1178
1179/// <p>An object that contains inbox placement data for an email provider.</p>
1180#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1181#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1182pub struct PlacementStatistics {
1183    /// <p>The percentage of emails that were authenticated by using DomainKeys Identified Mail (DKIM) during the predictive inbox placement test.</p>
1184    #[serde(rename = "DkimPercentage")]
1185    #[serde(skip_serializing_if = "Option::is_none")]
1186    pub dkim_percentage: Option<f64>,
1187    /// <p>The percentage of emails that arrived in recipients' inboxes during the predictive inbox placement test.</p>
1188    #[serde(rename = "InboxPercentage")]
1189    #[serde(skip_serializing_if = "Option::is_none")]
1190    pub inbox_percentage: Option<f64>,
1191    /// <p>The percentage of emails that didn't arrive in recipients' inboxes at all during the predictive inbox placement test.</p>
1192    #[serde(rename = "MissingPercentage")]
1193    #[serde(skip_serializing_if = "Option::is_none")]
1194    pub missing_percentage: Option<f64>,
1195    /// <p>The percentage of emails that arrived in recipients' spam or junk mail folders during the predictive inbox placement test.</p>
1196    #[serde(rename = "SpamPercentage")]
1197    #[serde(skip_serializing_if = "Option::is_none")]
1198    pub spam_percentage: Option<f64>,
1199    /// <p>The percentage of emails that were authenticated by using Sender Policy Framework (SPF) during the predictive inbox placement test.</p>
1200    #[serde(rename = "SpfPercentage")]
1201    #[serde(skip_serializing_if = "Option::is_none")]
1202    pub spf_percentage: Option<f64>,
1203}
1204
1205/// <p>A request to enable or disable the automatic IP address warm-up feature.</p>
1206#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1207#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1208pub struct PutAccountDedicatedIpWarmupAttributesRequest {
1209    /// <p>Enables or disables the automatic warm-up feature for dedicated IP addresses that are associated with your Amazon Pinpoint account in the current AWS Region. Set to <code>true</code> to enable the automatic warm-up feature, or set to <code>false</code> to disable it.</p>
1210    #[serde(rename = "AutoWarmupEnabled")]
1211    #[serde(skip_serializing_if = "Option::is_none")]
1212    pub auto_warmup_enabled: Option<bool>,
1213}
1214
1215/// <p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>
1216#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1217#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1218pub struct PutAccountDedicatedIpWarmupAttributesResponse {}
1219
1220/// <p>A request to change the ability of your account to send email.</p>
1221#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1222#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1223pub struct PutAccountSendingAttributesRequest {
1224    /// <p><p>Enables or disables your account&#39;s ability to send email. Set to <code>true</code> to enable email sending, or set to <code>false</code> to disable email sending.</p> <note> <p>If AWS paused your account&#39;s ability to send email, you can&#39;t use this operation to resume your account&#39;s ability to send email.</p> </note></p>
1225    #[serde(rename = "SendingEnabled")]
1226    #[serde(skip_serializing_if = "Option::is_none")]
1227    pub sending_enabled: Option<bool>,
1228}
1229
1230/// <p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>
1231#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1232#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1233pub struct PutAccountSendingAttributesResponse {}
1234
1235/// <p>A request to associate a configuration set with a dedicated IP pool.</p>
1236#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1237#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1238pub struct PutConfigurationSetDeliveryOptionsRequest {
1239    /// <p>The name of the configuration set that you want to associate with a dedicated IP pool.</p>
1240    #[serde(rename = "ConfigurationSetName")]
1241    pub configuration_set_name: String,
1242    /// <p>The name of the dedicated IP pool that you want to associate with the configuration set.</p>
1243    #[serde(rename = "SendingPoolName")]
1244    #[serde(skip_serializing_if = "Option::is_none")]
1245    pub sending_pool_name: Option<String>,
1246    /// <p>Specifies whether messages that use the configuration set are required to use Transport Layer Security (TLS). If the value is <code>Require</code>, messages are only delivered if a TLS connection can be established. If the value is <code>Optional</code>, messages can be delivered in plain text if a TLS connection can't be established.</p>
1247    #[serde(rename = "TlsPolicy")]
1248    #[serde(skip_serializing_if = "Option::is_none")]
1249    pub tls_policy: Option<String>,
1250}
1251
1252/// <p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>
1253#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1254#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1255pub struct PutConfigurationSetDeliveryOptionsResponse {}
1256
1257/// <p>A request to enable or disable tracking of reputation metrics for a configuration set.</p>
1258#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1259#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1260pub struct PutConfigurationSetReputationOptionsRequest {
1261    /// <p>The name of the configuration set that you want to enable or disable reputation metric tracking for.</p>
1262    #[serde(rename = "ConfigurationSetName")]
1263    pub configuration_set_name: String,
1264    /// <p>If <code>true</code>, tracking of reputation metrics is enabled for the configuration set. If <code>false</code>, tracking of reputation metrics is disabled for the configuration set.</p>
1265    #[serde(rename = "ReputationMetricsEnabled")]
1266    #[serde(skip_serializing_if = "Option::is_none")]
1267    pub reputation_metrics_enabled: Option<bool>,
1268}
1269
1270/// <p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>
1271#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1272#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1273pub struct PutConfigurationSetReputationOptionsResponse {}
1274
1275/// <p>A request to enable or disable the ability of Amazon Pinpoint to send emails that use a specific configuration set.</p>
1276#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1277#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1278pub struct PutConfigurationSetSendingOptionsRequest {
1279    /// <p>The name of the configuration set that you want to enable or disable email sending for.</p>
1280    #[serde(rename = "ConfigurationSetName")]
1281    pub configuration_set_name: String,
1282    /// <p>If <code>true</code>, email sending is enabled for the configuration set. If <code>false</code>, email sending is disabled for the configuration set.</p>
1283    #[serde(rename = "SendingEnabled")]
1284    #[serde(skip_serializing_if = "Option::is_none")]
1285    pub sending_enabled: Option<bool>,
1286}
1287
1288/// <p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>
1289#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1290#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1291pub struct PutConfigurationSetSendingOptionsResponse {}
1292
1293/// <p>A request to add a custom domain for tracking open and click events to a configuration set.</p>
1294#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1295#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1296pub struct PutConfigurationSetTrackingOptionsRequest {
1297    /// <p>The name of the configuration set that you want to add a custom tracking domain to.</p>
1298    #[serde(rename = "ConfigurationSetName")]
1299    pub configuration_set_name: String,
1300    /// <p>The domain that you want to use to track open and click events.</p>
1301    #[serde(rename = "CustomRedirectDomain")]
1302    #[serde(skip_serializing_if = "Option::is_none")]
1303    pub custom_redirect_domain: Option<String>,
1304}
1305
1306/// <p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>
1307#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1308#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1309pub struct PutConfigurationSetTrackingOptionsResponse {}
1310
1311/// <p>A request to move a dedicated IP address to a dedicated IP pool.</p>
1312#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1313#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1314pub struct PutDedicatedIpInPoolRequest {
1315    /// <p>The name of the IP pool that you want to add the dedicated IP address to. You have to specify an IP pool that already exists.</p>
1316    #[serde(rename = "DestinationPoolName")]
1317    pub destination_pool_name: String,
1318    /// <p>The IP address that you want to move to the dedicated IP pool. The value you specify has to be a dedicated IP address that's associated with your Amazon Pinpoint account.</p>
1319    #[serde(rename = "Ip")]
1320    pub ip: String,
1321}
1322
1323/// <p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>
1324#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1325#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1326pub struct PutDedicatedIpInPoolResponse {}
1327
1328/// <p>A request to change the warm-up attributes for a dedicated IP address. This operation is useful when you want to resume the warm-up process for an existing IP address.</p>
1329#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1330#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1331pub struct PutDedicatedIpWarmupAttributesRequest {
1332    /// <p>The dedicated IP address that you want to update the warm-up attributes for.</p>
1333    #[serde(rename = "Ip")]
1334    pub ip: String,
1335    /// <p>The warm-up percentage that you want to associate with the dedicated IP address.</p>
1336    #[serde(rename = "WarmupPercentage")]
1337    pub warmup_percentage: i64,
1338}
1339
1340/// <p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>
1341#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1342#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1343pub struct PutDedicatedIpWarmupAttributesResponse {}
1344
1345/// <p>Enable or disable the Deliverability dashboard for your Amazon Pinpoint account. When you enable the Deliverability dashboard, you gain access to reputation, deliverability, and other metrics for the domains that you use to send email using Amazon Pinpoint. You also gain the ability to perform predictive inbox placement tests.</p> <p>When you use the Deliverability dashboard, you pay a monthly subscription charge, in addition to any other fees that you accrue by using Amazon Pinpoint. For more information about the features and cost of a Deliverability dashboard subscription, see <a href="http://aws.amazon.com/pinpoint/pricing/">Amazon Pinpoint Pricing</a>.</p>
1346#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1347#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1348pub struct PutDeliverabilityDashboardOptionRequest {
1349    /// <p>Specifies whether to enable the Deliverability dashboard for your Amazon Pinpoint account. To enable the dashboard, set this value to <code>true</code>.</p>
1350    #[serde(rename = "DashboardEnabled")]
1351    pub dashboard_enabled: bool,
1352    /// <p>An array of objects, one for each verified domain that you use to send email and enabled the Deliverability dashboard for.</p>
1353    #[serde(rename = "SubscribedDomains")]
1354    #[serde(skip_serializing_if = "Option::is_none")]
1355    pub subscribed_domains: Option<Vec<DomainDeliverabilityTrackingOption>>,
1356}
1357
1358/// <p>A response that indicates whether the Deliverability dashboard is enabled for your Amazon Pinpoint account.</p>
1359#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1360#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1361pub struct PutDeliverabilityDashboardOptionResponse {}
1362
1363/// <p>A request to enable or disable DKIM signing of email that you send from an email identity.</p>
1364#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1365#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1366pub struct PutEmailIdentityDkimAttributesRequest {
1367    /// <p>The email identity that you want to change the DKIM settings for.</p>
1368    #[serde(rename = "EmailIdentity")]
1369    pub email_identity: String,
1370    /// <p>Sets the DKIM signing configuration for the identity.</p> <p>When you set this value <code>true</code>, then the messages that Amazon Pinpoint sends from the identity are DKIM-signed. When you set this value to <code>false</code>, then the messages that Amazon Pinpoint sends from the identity aren't DKIM-signed.</p>
1371    #[serde(rename = "SigningEnabled")]
1372    #[serde(skip_serializing_if = "Option::is_none")]
1373    pub signing_enabled: Option<bool>,
1374}
1375
1376/// <p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>
1377#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1378#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1379pub struct PutEmailIdentityDkimAttributesResponse {}
1380
1381/// <p>A request to set the attributes that control how bounce and complaint events are processed.</p>
1382#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1383#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1384pub struct PutEmailIdentityFeedbackAttributesRequest {
1385    /// <p>Sets the feedback forwarding configuration for the identity.</p> <p>If the value is <code>true</code>, Amazon Pinpoint sends you email notifications when bounce or complaint events occur. Amazon Pinpoint sends this notification to the address that you specified in the Return-Path header of the original email.</p> <p>When you set this value to <code>false</code>, Amazon Pinpoint sends notifications through other mechanisms, such as by notifying an Amazon SNS topic or another event destination. You're required to have a method of tracking bounces and complaints. If you haven't set up another mechanism for receiving bounce or complaint notifications, Amazon Pinpoint sends an email notification when these events occur (even if this setting is disabled).</p>
1386    #[serde(rename = "EmailForwardingEnabled")]
1387    #[serde(skip_serializing_if = "Option::is_none")]
1388    pub email_forwarding_enabled: Option<bool>,
1389    /// <p>The email identity that you want to configure bounce and complaint feedback forwarding for.</p>
1390    #[serde(rename = "EmailIdentity")]
1391    pub email_identity: String,
1392}
1393
1394/// <p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>
1395#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1396#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1397pub struct PutEmailIdentityFeedbackAttributesResponse {}
1398
1399/// <p>A request to configure the custom MAIL FROM domain for a verified identity.</p>
1400#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1401#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1402pub struct PutEmailIdentityMailFromAttributesRequest {
1403    /// <p>The action that you want Amazon Pinpoint to take if it can't read the required MX record when you send an email. When you set this value to <code>UseDefaultValue</code>, Amazon Pinpoint uses <i>amazonses.com</i> as the MAIL FROM domain. When you set this value to <code>RejectMessage</code>, Amazon Pinpoint returns a <code>MailFromDomainNotVerified</code> error, and doesn't attempt to deliver the email.</p> <p>These behaviors are taken when the custom MAIL FROM domain configuration is in the <code>Pending</code>, <code>Failed</code>, and <code>TemporaryFailure</code> states.</p>
1404    #[serde(rename = "BehaviorOnMxFailure")]
1405    #[serde(skip_serializing_if = "Option::is_none")]
1406    pub behavior_on_mx_failure: Option<String>,
1407    /// <p>The verified email identity that you want to set up the custom MAIL FROM domain for.</p>
1408    #[serde(rename = "EmailIdentity")]
1409    pub email_identity: String,
1410    /// <p><p> The custom MAIL FROM domain that you want the verified identity to use. The MAIL FROM domain must meet the following criteria:</p> <ul> <li> <p>It has to be a subdomain of the verified identity.</p> </li> <li> <p>It can&#39;t be used to receive email.</p> </li> <li> <p>It can&#39;t be used in a &quot;From&quot; address if the MAIL FROM domain is a destination for feedback forwarding emails.</p> </li> </ul></p>
1411    #[serde(rename = "MailFromDomain")]
1412    #[serde(skip_serializing_if = "Option::is_none")]
1413    pub mail_from_domain: Option<String>,
1414}
1415
1416/// <p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>
1417#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1418#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1419pub struct PutEmailIdentityMailFromAttributesResponse {}
1420
1421/// <p>The raw email message.</p>
1422#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1423#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1424pub struct RawMessage {
1425    /// <p><p>The raw email message. The message has to meet the following criteria:</p> <ul> <li> <p>The message has to contain a header and a body, separated by one blank line.</p> </li> <li> <p>All of the required header fields must be present in the message.</p> </li> <li> <p>Each part of a multipart MIME message must be formatted properly.</p> </li> <li> <p>Attachments must be in a file format that Amazon Pinpoint supports. </p> </li> <li> <p>The entire message must be Base64 encoded.</p> </li> <li> <p>If any of the MIME parts in your message contain content that is outside of the 7-bit ASCII character range, you should encode that content to ensure that recipients&#39; email clients render the message properly.</p> </li> <li> <p>The length of any single line of text in the message can&#39;t exceed 1,000 characters. This restriction is defined in <a href="https://tools.ietf.org/html/rfc5321">RFC 5321</a>.</p> </li> </ul></p>
1426    #[serde(rename = "Data")]
1427    #[serde(
1428        deserialize_with = "::rusoto_core::serialization::SerdeBlob::deserialize_blob",
1429        serialize_with = "::rusoto_core::serialization::SerdeBlob::serialize_blob",
1430        default
1431    )]
1432    pub data: bytes::Bytes,
1433}
1434
1435/// <p>Enable or disable collection of reputation metrics for emails that you send using this configuration set in the current AWS Region. </p>
1436#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1437pub struct ReputationOptions {
1438    /// <p>The date and time (in Unix time) when the reputation metrics were last given a fresh start. When your account is given a fresh start, your reputation metrics are calculated starting from the date of the fresh start.</p>
1439    #[serde(rename = "LastFreshStart")]
1440    #[serde(skip_serializing_if = "Option::is_none")]
1441    pub last_fresh_start: Option<f64>,
1442    /// <p>If <code>true</code>, tracking of reputation metrics is enabled for the configuration set. If <code>false</code>, tracking of reputation metrics is disabled for the configuration set.</p>
1443    #[serde(rename = "ReputationMetricsEnabled")]
1444    #[serde(skip_serializing_if = "Option::is_none")]
1445    pub reputation_metrics_enabled: Option<bool>,
1446}
1447
1448/// <p>A request to send an email message.</p>
1449#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1450#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1451pub struct SendEmailRequest {
1452    /// <p>The name of the configuration set that you want to use when sending the email.</p>
1453    #[serde(rename = "ConfigurationSetName")]
1454    #[serde(skip_serializing_if = "Option::is_none")]
1455    pub configuration_set_name: Option<String>,
1456    /// <p>An object that contains the body of the message. You can send either a Simple message or a Raw message.</p>
1457    #[serde(rename = "Content")]
1458    pub content: EmailContent,
1459    /// <p>An object that contains the recipients of the email message.</p>
1460    #[serde(rename = "Destination")]
1461    pub destination: Destination,
1462    /// <p>A list of tags, in the form of name/value pairs, to apply to an email that you send using the <code>SendEmail</code> operation. Tags correspond to characteristics of the email that you define, so that you can publish email sending events. </p>
1463    #[serde(rename = "EmailTags")]
1464    #[serde(skip_serializing_if = "Option::is_none")]
1465    pub email_tags: Option<Vec<MessageTag>>,
1466    /// <p>The address that Amazon Pinpoint should send bounce and complaint notifications to.</p>
1467    #[serde(rename = "FeedbackForwardingEmailAddress")]
1468    #[serde(skip_serializing_if = "Option::is_none")]
1469    pub feedback_forwarding_email_address: Option<String>,
1470    /// <p>The email address that you want to use as the "From" address for the email. The address that you specify has to be verified. </p>
1471    #[serde(rename = "FromEmailAddress")]
1472    #[serde(skip_serializing_if = "Option::is_none")]
1473    pub from_email_address: Option<String>,
1474    /// <p>The "Reply-to" email addresses for the message. When the recipient replies to the message, each Reply-to address receives the reply.</p>
1475    #[serde(rename = "ReplyToAddresses")]
1476    #[serde(skip_serializing_if = "Option::is_none")]
1477    pub reply_to_addresses: Option<Vec<String>>,
1478}
1479
1480/// <p>A unique message ID that you receive when Amazon Pinpoint accepts an email for sending.</p>
1481#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1482#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1483pub struct SendEmailResponse {
1484    /// <p><p>A unique identifier for the message that is generated when Amazon Pinpoint accepts the message.</p> <note> <p>It is possible for Amazon Pinpoint to accept a message without sending it. This can happen when the message you&#39;re trying to send has an attachment doesn&#39;t pass a virus check, or when you send a templated email that contains invalid personalization content, for example.</p> </note></p>
1485    #[serde(rename = "MessageId")]
1486    #[serde(skip_serializing_if = "Option::is_none")]
1487    pub message_id: Option<String>,
1488}
1489
1490/// <p>An object that contains information about the per-day and per-second sending limits for your Amazon Pinpoint account in the current AWS Region.</p>
1491#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1492#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1493pub struct SendQuota {
1494    /// <p>The maximum number of emails that you can send in the current AWS Region over a 24-hour period. This value is also called your <i>sending quota</i>.</p>
1495    #[serde(rename = "Max24HourSend")]
1496    #[serde(skip_serializing_if = "Option::is_none")]
1497    pub max_24_hour_send: Option<f64>,
1498    /// <p>The maximum number of emails that you can send per second in the current AWS Region. This value is also called your <i>maximum sending rate</i> or your <i>maximum TPS (transactions per second) rate</i>.</p>
1499    #[serde(rename = "MaxSendRate")]
1500    #[serde(skip_serializing_if = "Option::is_none")]
1501    pub max_send_rate: Option<f64>,
1502    /// <p>The number of emails sent from your Amazon Pinpoint account in the current AWS Region over the past 24 hours.</p>
1503    #[serde(rename = "SentLast24Hours")]
1504    #[serde(skip_serializing_if = "Option::is_none")]
1505    pub sent_last_24_hours: Option<f64>,
1506}
1507
1508/// <p>Used to enable or disable email sending for messages that use this configuration set in the current AWS Region.</p>
1509#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1510pub struct SendingOptions {
1511    /// <p>If <code>true</code>, email sending is enabled for the configuration set. If <code>false</code>, email sending is disabled for the configuration set.</p>
1512    #[serde(rename = "SendingEnabled")]
1513    #[serde(skip_serializing_if = "Option::is_none")]
1514    pub sending_enabled: Option<bool>,
1515}
1516
1517/// <p>An object that defines an Amazon SNS destination for email events. You can use Amazon SNS to send notification when certain email events occur.</p>
1518#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1519pub struct SnsDestination {
1520    /// <p>The Amazon Resource Name (ARN) of the Amazon SNS topic that you want to publish email events to. For more information about Amazon SNS topics, see the <a href="https://docs.aws.amazon.com/sns/latest/dg/CreateTopic.html">Amazon SNS Developer Guide</a>.</p>
1521    #[serde(rename = "TopicArn")]
1522    pub topic_arn: String,
1523}
1524
1525/// <p><p>An object that defines the tags that are associated with a resource. A <i>tag</i> is a label that you optionally define and associate with a resource in Amazon Pinpoint. Tags can help you categorize and manage resources in different ways, such as by purpose, owner, environment, or other criteria. A resource can have as many as 50 tags.</p> <p>Each tag consists of a required <i>tag key</i> and an associated <i>tag value</i>, both of which you define. A tag key is a general label that acts as a category for a more specific tag value. A tag value acts as a descriptor within a tag key. A tag key can contain as many as 128 characters. A tag value can contain as many as 256 characters. The characters can be Unicode letters, digits, white space, or one of the following symbols: _ . : / = + -. The following additional restrictions apply to tags:</p> <ul> <li> <p>Tag keys and values are case sensitive.</p> </li> <li> <p>For each associated resource, each tag key must be unique and it can have only one value.</p> </li> <li> <p>The <code>aws:</code> prefix is reserved for use by AWS; you can’t use it in any tag keys or values that you define. In addition, you can&#39;t edit or remove tag keys or values that use this prefix. Tags that use this prefix don’t count against the limit of 50 tags per resource.</p> </li> <li> <p>You can associate tags with public or shared resources, but the tags are available only for your AWS account, not any other accounts that share the resource. In addition, the tags are available only for resources that are located in the specified AWS Region for your AWS account.</p> </li> </ul></p>
1526#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1527pub struct Tag {
1528    /// <p>One part of a key-value pair that defines a tag. The maximum length of a tag key is 128 characters. The minimum length is 1 character.</p>
1529    #[serde(rename = "Key")]
1530    pub key: String,
1531    /// <p>The optional part of a key-value pair that defines a tag. The maximum length of a tag value is 256 characters. The minimum length is 0 characters. If you don’t want a resource to have a specific tag value, don’t specify a value for this parameter. Amazon Pinpoint will set the value to an empty string.</p>
1532    #[serde(rename = "Value")]
1533    pub value: String,
1534}
1535
1536#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1537#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1538pub struct TagResourceRequest {
1539    /// <p>The Amazon Resource Name (ARN) of the resource that you want to add one or more tags to.</p>
1540    #[serde(rename = "ResourceArn")]
1541    pub resource_arn: String,
1542    /// <p>A list of the tags that you want to add to the resource. A tag consists of a required tag key (<code>Key</code>) and an associated tag value (<code>Value</code>). The maximum length of a tag key is 128 characters. The maximum length of a tag value is 256 characters.</p>
1543    #[serde(rename = "Tags")]
1544    pub tags: Vec<Tag>,
1545}
1546
1547#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1548#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1549pub struct TagResourceResponse {}
1550
1551#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1552#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1553pub struct Template {
1554    /// <p>The Amazon Resource Name (ARN) of the template.</p>
1555    #[serde(rename = "TemplateArn")]
1556    #[serde(skip_serializing_if = "Option::is_none")]
1557    pub template_arn: Option<String>,
1558    /// <p>An object that defines the values to use for message variables in the template. This object is a set of key-value pairs. Each key defines a message variable in the template. The corresponding value defines the value to use for that variable.</p>
1559    #[serde(rename = "TemplateData")]
1560    #[serde(skip_serializing_if = "Option::is_none")]
1561    pub template_data: Option<String>,
1562}
1563
1564/// <p>An object that defines the tracking options for a configuration set. When you use Amazon Pinpoint to send an email, it contains an invisible image that's used to track when recipients open your email. If your email contains links, those links are changed slightly in order to track when recipients click them.</p> <p>These images and links include references to a domain operated by AWS. You can optionally configure Amazon Pinpoint to use a domain that you operate for these images and links.</p>
1565#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1566pub struct TrackingOptions {
1567    /// <p>The domain that you want to use for tracking open and click events.</p>
1568    #[serde(rename = "CustomRedirectDomain")]
1569    pub custom_redirect_domain: String,
1570}
1571
1572#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1573#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1574pub struct UntagResourceRequest {
1575    /// <p>The Amazon Resource Name (ARN) of the resource that you want to remove one or more tags from.</p>
1576    #[serde(rename = "ResourceArn")]
1577    pub resource_arn: String,
1578    /// <p>The tags (tag keys) that you want to remove from the resource. When you specify a tag key, the action removes both that key and its associated tag value.</p> <p>To remove more than one tag from the resource, append the <code>TagKeys</code> parameter and argument for each additional tag to remove, separated by an ampersand. For example: <code>/v1/email/tags?ResourceArn=ResourceArn&amp;TagKeys=Key1&amp;TagKeys=Key2</code> </p>
1579    #[serde(rename = "TagKeys")]
1580    pub tag_keys: Vec<String>,
1581}
1582
1583#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1584#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1585pub struct UntagResourceResponse {}
1586
1587/// <p>A request to change the settings for an event destination for a configuration set.</p>
1588#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1589#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1590pub struct UpdateConfigurationSetEventDestinationRequest {
1591    /// <p>The name of the configuration set that contains the event destination that you want to modify.</p>
1592    #[serde(rename = "ConfigurationSetName")]
1593    pub configuration_set_name: String,
1594    /// <p>An object that defines the event destination.</p>
1595    #[serde(rename = "EventDestination")]
1596    pub event_destination: EventDestinationDefinition,
1597    /// <p>The name of the event destination that you want to modify.</p>
1598    #[serde(rename = "EventDestinationName")]
1599    pub event_destination_name: String,
1600}
1601
1602/// <p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>
1603#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1604#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1605pub struct UpdateConfigurationSetEventDestinationResponse {}
1606
1607/// <p>An object that contains information about the amount of email that was delivered to recipients.</p>
1608#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1609#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1610pub struct VolumeStatistics {
1611    /// <p>The total number of emails that arrived in recipients' inboxes.</p>
1612    #[serde(rename = "InboxRawCount")]
1613    #[serde(skip_serializing_if = "Option::is_none")]
1614    pub inbox_raw_count: Option<i64>,
1615    /// <p>An estimate of the percentage of emails sent from the current domain that will arrive in recipients' inboxes.</p>
1616    #[serde(rename = "ProjectedInbox")]
1617    #[serde(skip_serializing_if = "Option::is_none")]
1618    pub projected_inbox: Option<i64>,
1619    /// <p>An estimate of the percentage of emails sent from the current domain that will arrive in recipients' spam or junk mail folders.</p>
1620    #[serde(rename = "ProjectedSpam")]
1621    #[serde(skip_serializing_if = "Option::is_none")]
1622    pub projected_spam: Option<i64>,
1623    /// <p>The total number of emails that arrived in recipients' spam or junk mail folders.</p>
1624    #[serde(rename = "SpamRawCount")]
1625    #[serde(skip_serializing_if = "Option::is_none")]
1626    pub spam_raw_count: Option<i64>,
1627}
1628
1629/// Errors returned by CreateConfigurationSet
1630#[derive(Debug, PartialEq)]
1631pub enum CreateConfigurationSetError {
1632    /// <p>The resource specified in your request already exists.</p>
1633    AlreadyExists(String),
1634    /// <p>The input you provided is invalid.</p>
1635    BadRequest(String),
1636    /// <p>The resource is being modified by another operation or thread.</p>
1637    ConcurrentModification(String),
1638    /// <p>There are too many instances of the specified resource type.</p>
1639    LimitExceeded(String),
1640    /// <p>The resource you attempted to access doesn't exist.</p>
1641    NotFound(String),
1642    /// <p>Too many requests have been made to the operation.</p>
1643    TooManyRequests(String),
1644}
1645
1646impl CreateConfigurationSetError {
1647    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<CreateConfigurationSetError> {
1648        if let Some(err) = proto::json::Error::parse_rest(&res) {
1649            match err.typ.as_str() {
1650                "AlreadyExistsException" => {
1651                    return RusotoError::Service(CreateConfigurationSetError::AlreadyExists(
1652                        err.msg,
1653                    ))
1654                }
1655                "BadRequestException" => {
1656                    return RusotoError::Service(CreateConfigurationSetError::BadRequest(err.msg))
1657                }
1658                "ConcurrentModificationException" => {
1659                    return RusotoError::Service(
1660                        CreateConfigurationSetError::ConcurrentModification(err.msg),
1661                    )
1662                }
1663                "LimitExceededException" => {
1664                    return RusotoError::Service(CreateConfigurationSetError::LimitExceeded(
1665                        err.msg,
1666                    ))
1667                }
1668                "NotFoundException" => {
1669                    return RusotoError::Service(CreateConfigurationSetError::NotFound(err.msg))
1670                }
1671                "TooManyRequestsException" => {
1672                    return RusotoError::Service(CreateConfigurationSetError::TooManyRequests(
1673                        err.msg,
1674                    ))
1675                }
1676                "ValidationException" => return RusotoError::Validation(err.msg),
1677                _ => {}
1678            }
1679        }
1680        RusotoError::Unknown(res)
1681    }
1682}
1683impl fmt::Display for CreateConfigurationSetError {
1684    #[allow(unused_variables)]
1685    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
1686        match *self {
1687            CreateConfigurationSetError::AlreadyExists(ref cause) => write!(f, "{}", cause),
1688            CreateConfigurationSetError::BadRequest(ref cause) => write!(f, "{}", cause),
1689            CreateConfigurationSetError::ConcurrentModification(ref cause) => {
1690                write!(f, "{}", cause)
1691            }
1692            CreateConfigurationSetError::LimitExceeded(ref cause) => write!(f, "{}", cause),
1693            CreateConfigurationSetError::NotFound(ref cause) => write!(f, "{}", cause),
1694            CreateConfigurationSetError::TooManyRequests(ref cause) => write!(f, "{}", cause),
1695        }
1696    }
1697}
1698impl Error for CreateConfigurationSetError {}
1699/// Errors returned by CreateConfigurationSetEventDestination
1700#[derive(Debug, PartialEq)]
1701pub enum CreateConfigurationSetEventDestinationError {
1702    /// <p>The resource specified in your request already exists.</p>
1703    AlreadyExists(String),
1704    /// <p>The input you provided is invalid.</p>
1705    BadRequest(String),
1706    /// <p>There are too many instances of the specified resource type.</p>
1707    LimitExceeded(String),
1708    /// <p>The resource you attempted to access doesn't exist.</p>
1709    NotFound(String),
1710    /// <p>Too many requests have been made to the operation.</p>
1711    TooManyRequests(String),
1712}
1713
1714impl CreateConfigurationSetEventDestinationError {
1715    pub fn from_response(
1716        res: BufferedHttpResponse,
1717    ) -> RusotoError<CreateConfigurationSetEventDestinationError> {
1718        if let Some(err) = proto::json::Error::parse_rest(&res) {
1719            match err.typ.as_str() {
1720                "AlreadyExistsException" => {
1721                    return RusotoError::Service(
1722                        CreateConfigurationSetEventDestinationError::AlreadyExists(err.msg),
1723                    )
1724                }
1725                "BadRequestException" => {
1726                    return RusotoError::Service(
1727                        CreateConfigurationSetEventDestinationError::BadRequest(err.msg),
1728                    )
1729                }
1730                "LimitExceededException" => {
1731                    return RusotoError::Service(
1732                        CreateConfigurationSetEventDestinationError::LimitExceeded(err.msg),
1733                    )
1734                }
1735                "NotFoundException" => {
1736                    return RusotoError::Service(
1737                        CreateConfigurationSetEventDestinationError::NotFound(err.msg),
1738                    )
1739                }
1740                "TooManyRequestsException" => {
1741                    return RusotoError::Service(
1742                        CreateConfigurationSetEventDestinationError::TooManyRequests(err.msg),
1743                    )
1744                }
1745                "ValidationException" => return RusotoError::Validation(err.msg),
1746                _ => {}
1747            }
1748        }
1749        RusotoError::Unknown(res)
1750    }
1751}
1752impl fmt::Display for CreateConfigurationSetEventDestinationError {
1753    #[allow(unused_variables)]
1754    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
1755        match *self {
1756            CreateConfigurationSetEventDestinationError::AlreadyExists(ref cause) => {
1757                write!(f, "{}", cause)
1758            }
1759            CreateConfigurationSetEventDestinationError::BadRequest(ref cause) => {
1760                write!(f, "{}", cause)
1761            }
1762            CreateConfigurationSetEventDestinationError::LimitExceeded(ref cause) => {
1763                write!(f, "{}", cause)
1764            }
1765            CreateConfigurationSetEventDestinationError::NotFound(ref cause) => {
1766                write!(f, "{}", cause)
1767            }
1768            CreateConfigurationSetEventDestinationError::TooManyRequests(ref cause) => {
1769                write!(f, "{}", cause)
1770            }
1771        }
1772    }
1773}
1774impl Error for CreateConfigurationSetEventDestinationError {}
1775/// Errors returned by CreateDedicatedIpPool
1776#[derive(Debug, PartialEq)]
1777pub enum CreateDedicatedIpPoolError {
1778    /// <p>The resource specified in your request already exists.</p>
1779    AlreadyExists(String),
1780    /// <p>The input you provided is invalid.</p>
1781    BadRequest(String),
1782    /// <p>The resource is being modified by another operation or thread.</p>
1783    ConcurrentModification(String),
1784    /// <p>There are too many instances of the specified resource type.</p>
1785    LimitExceeded(String),
1786    /// <p>Too many requests have been made to the operation.</p>
1787    TooManyRequests(String),
1788}
1789
1790impl CreateDedicatedIpPoolError {
1791    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<CreateDedicatedIpPoolError> {
1792        if let Some(err) = proto::json::Error::parse_rest(&res) {
1793            match err.typ.as_str() {
1794                "AlreadyExistsException" => {
1795                    return RusotoError::Service(CreateDedicatedIpPoolError::AlreadyExists(err.msg))
1796                }
1797                "BadRequestException" => {
1798                    return RusotoError::Service(CreateDedicatedIpPoolError::BadRequest(err.msg))
1799                }
1800                "ConcurrentModificationException" => {
1801                    return RusotoError::Service(
1802                        CreateDedicatedIpPoolError::ConcurrentModification(err.msg),
1803                    )
1804                }
1805                "LimitExceededException" => {
1806                    return RusotoError::Service(CreateDedicatedIpPoolError::LimitExceeded(err.msg))
1807                }
1808                "TooManyRequestsException" => {
1809                    return RusotoError::Service(CreateDedicatedIpPoolError::TooManyRequests(
1810                        err.msg,
1811                    ))
1812                }
1813                "ValidationException" => return RusotoError::Validation(err.msg),
1814                _ => {}
1815            }
1816        }
1817        RusotoError::Unknown(res)
1818    }
1819}
1820impl fmt::Display for CreateDedicatedIpPoolError {
1821    #[allow(unused_variables)]
1822    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
1823        match *self {
1824            CreateDedicatedIpPoolError::AlreadyExists(ref cause) => write!(f, "{}", cause),
1825            CreateDedicatedIpPoolError::BadRequest(ref cause) => write!(f, "{}", cause),
1826            CreateDedicatedIpPoolError::ConcurrentModification(ref cause) => write!(f, "{}", cause),
1827            CreateDedicatedIpPoolError::LimitExceeded(ref cause) => write!(f, "{}", cause),
1828            CreateDedicatedIpPoolError::TooManyRequests(ref cause) => write!(f, "{}", cause),
1829        }
1830    }
1831}
1832impl Error for CreateDedicatedIpPoolError {}
1833/// Errors returned by CreateDeliverabilityTestReport
1834#[derive(Debug, PartialEq)]
1835pub enum CreateDeliverabilityTestReportError {
1836    /// <p>The message can't be sent because the account's ability to send email has been permanently restricted.</p>
1837    AccountSuspended(String),
1838    /// <p>The input you provided is invalid.</p>
1839    BadRequest(String),
1840    /// <p>The resource is being modified by another operation or thread.</p>
1841    ConcurrentModification(String),
1842    /// <p>There are too many instances of the specified resource type.</p>
1843    LimitExceeded(String),
1844    /// <p>The message can't be sent because the sending domain isn't verified.</p>
1845    MailFromDomainNotVerified(String),
1846    /// <p>The message can't be sent because it contains invalid content.</p>
1847    MessageRejected(String),
1848    /// <p>The resource you attempted to access doesn't exist.</p>
1849    NotFound(String),
1850    /// <p>The message can't be sent because the account's ability to send email is currently paused.</p>
1851    SendingPaused(String),
1852    /// <p>Too many requests have been made to the operation.</p>
1853    TooManyRequests(String),
1854}
1855
1856impl CreateDeliverabilityTestReportError {
1857    pub fn from_response(
1858        res: BufferedHttpResponse,
1859    ) -> RusotoError<CreateDeliverabilityTestReportError> {
1860        if let Some(err) = proto::json::Error::parse_rest(&res) {
1861            match err.typ.as_str() {
1862                "AccountSuspendedException" => {
1863                    return RusotoError::Service(
1864                        CreateDeliverabilityTestReportError::AccountSuspended(err.msg),
1865                    )
1866                }
1867                "BadRequestException" => {
1868                    return RusotoError::Service(CreateDeliverabilityTestReportError::BadRequest(
1869                        err.msg,
1870                    ))
1871                }
1872                "ConcurrentModificationException" => {
1873                    return RusotoError::Service(
1874                        CreateDeliverabilityTestReportError::ConcurrentModification(err.msg),
1875                    )
1876                }
1877                "LimitExceededException" => {
1878                    return RusotoError::Service(
1879                        CreateDeliverabilityTestReportError::LimitExceeded(err.msg),
1880                    )
1881                }
1882                "MailFromDomainNotVerifiedException" => {
1883                    return RusotoError::Service(
1884                        CreateDeliverabilityTestReportError::MailFromDomainNotVerified(err.msg),
1885                    )
1886                }
1887                "MessageRejected" => {
1888                    return RusotoError::Service(
1889                        CreateDeliverabilityTestReportError::MessageRejected(err.msg),
1890                    )
1891                }
1892                "NotFoundException" => {
1893                    return RusotoError::Service(CreateDeliverabilityTestReportError::NotFound(
1894                        err.msg,
1895                    ))
1896                }
1897                "SendingPausedException" => {
1898                    return RusotoError::Service(
1899                        CreateDeliverabilityTestReportError::SendingPaused(err.msg),
1900                    )
1901                }
1902                "TooManyRequestsException" => {
1903                    return RusotoError::Service(
1904                        CreateDeliverabilityTestReportError::TooManyRequests(err.msg),
1905                    )
1906                }
1907                "ValidationException" => return RusotoError::Validation(err.msg),
1908                _ => {}
1909            }
1910        }
1911        RusotoError::Unknown(res)
1912    }
1913}
1914impl fmt::Display for CreateDeliverabilityTestReportError {
1915    #[allow(unused_variables)]
1916    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
1917        match *self {
1918            CreateDeliverabilityTestReportError::AccountSuspended(ref cause) => {
1919                write!(f, "{}", cause)
1920            }
1921            CreateDeliverabilityTestReportError::BadRequest(ref cause) => write!(f, "{}", cause),
1922            CreateDeliverabilityTestReportError::ConcurrentModification(ref cause) => {
1923                write!(f, "{}", cause)
1924            }
1925            CreateDeliverabilityTestReportError::LimitExceeded(ref cause) => write!(f, "{}", cause),
1926            CreateDeliverabilityTestReportError::MailFromDomainNotVerified(ref cause) => {
1927                write!(f, "{}", cause)
1928            }
1929            CreateDeliverabilityTestReportError::MessageRejected(ref cause) => {
1930                write!(f, "{}", cause)
1931            }
1932            CreateDeliverabilityTestReportError::NotFound(ref cause) => write!(f, "{}", cause),
1933            CreateDeliverabilityTestReportError::SendingPaused(ref cause) => write!(f, "{}", cause),
1934            CreateDeliverabilityTestReportError::TooManyRequests(ref cause) => {
1935                write!(f, "{}", cause)
1936            }
1937        }
1938    }
1939}
1940impl Error for CreateDeliverabilityTestReportError {}
1941/// Errors returned by CreateEmailIdentity
1942#[derive(Debug, PartialEq)]
1943pub enum CreateEmailIdentityError {
1944    /// <p>The input you provided is invalid.</p>
1945    BadRequest(String),
1946    /// <p>The resource is being modified by another operation or thread.</p>
1947    ConcurrentModification(String),
1948    /// <p>There are too many instances of the specified resource type.</p>
1949    LimitExceeded(String),
1950    /// <p>Too many requests have been made to the operation.</p>
1951    TooManyRequests(String),
1952}
1953
1954impl CreateEmailIdentityError {
1955    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<CreateEmailIdentityError> {
1956        if let Some(err) = proto::json::Error::parse_rest(&res) {
1957            match err.typ.as_str() {
1958                "BadRequestException" => {
1959                    return RusotoError::Service(CreateEmailIdentityError::BadRequest(err.msg))
1960                }
1961                "ConcurrentModificationException" => {
1962                    return RusotoError::Service(CreateEmailIdentityError::ConcurrentModification(
1963                        err.msg,
1964                    ))
1965                }
1966                "LimitExceededException" => {
1967                    return RusotoError::Service(CreateEmailIdentityError::LimitExceeded(err.msg))
1968                }
1969                "TooManyRequestsException" => {
1970                    return RusotoError::Service(CreateEmailIdentityError::TooManyRequests(err.msg))
1971                }
1972                "ValidationException" => return RusotoError::Validation(err.msg),
1973                _ => {}
1974            }
1975        }
1976        RusotoError::Unknown(res)
1977    }
1978}
1979impl fmt::Display for CreateEmailIdentityError {
1980    #[allow(unused_variables)]
1981    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
1982        match *self {
1983            CreateEmailIdentityError::BadRequest(ref cause) => write!(f, "{}", cause),
1984            CreateEmailIdentityError::ConcurrentModification(ref cause) => write!(f, "{}", cause),
1985            CreateEmailIdentityError::LimitExceeded(ref cause) => write!(f, "{}", cause),
1986            CreateEmailIdentityError::TooManyRequests(ref cause) => write!(f, "{}", cause),
1987        }
1988    }
1989}
1990impl Error for CreateEmailIdentityError {}
1991/// Errors returned by DeleteConfigurationSet
1992#[derive(Debug, PartialEq)]
1993pub enum DeleteConfigurationSetError {
1994    /// <p>The input you provided is invalid.</p>
1995    BadRequest(String),
1996    /// <p>The resource is being modified by another operation or thread.</p>
1997    ConcurrentModification(String),
1998    /// <p>The resource you attempted to access doesn't exist.</p>
1999    NotFound(String),
2000    /// <p>Too many requests have been made to the operation.</p>
2001    TooManyRequests(String),
2002}
2003
2004impl DeleteConfigurationSetError {
2005    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteConfigurationSetError> {
2006        if let Some(err) = proto::json::Error::parse_rest(&res) {
2007            match err.typ.as_str() {
2008                "BadRequestException" => {
2009                    return RusotoError::Service(DeleteConfigurationSetError::BadRequest(err.msg))
2010                }
2011                "ConcurrentModificationException" => {
2012                    return RusotoError::Service(
2013                        DeleteConfigurationSetError::ConcurrentModification(err.msg),
2014                    )
2015                }
2016                "NotFoundException" => {
2017                    return RusotoError::Service(DeleteConfigurationSetError::NotFound(err.msg))
2018                }
2019                "TooManyRequestsException" => {
2020                    return RusotoError::Service(DeleteConfigurationSetError::TooManyRequests(
2021                        err.msg,
2022                    ))
2023                }
2024                "ValidationException" => return RusotoError::Validation(err.msg),
2025                _ => {}
2026            }
2027        }
2028        RusotoError::Unknown(res)
2029    }
2030}
2031impl fmt::Display for DeleteConfigurationSetError {
2032    #[allow(unused_variables)]
2033    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2034        match *self {
2035            DeleteConfigurationSetError::BadRequest(ref cause) => write!(f, "{}", cause),
2036            DeleteConfigurationSetError::ConcurrentModification(ref cause) => {
2037                write!(f, "{}", cause)
2038            }
2039            DeleteConfigurationSetError::NotFound(ref cause) => write!(f, "{}", cause),
2040            DeleteConfigurationSetError::TooManyRequests(ref cause) => write!(f, "{}", cause),
2041        }
2042    }
2043}
2044impl Error for DeleteConfigurationSetError {}
2045/// Errors returned by DeleteConfigurationSetEventDestination
2046#[derive(Debug, PartialEq)]
2047pub enum DeleteConfigurationSetEventDestinationError {
2048    /// <p>The input you provided is invalid.</p>
2049    BadRequest(String),
2050    /// <p>The resource you attempted to access doesn't exist.</p>
2051    NotFound(String),
2052    /// <p>Too many requests have been made to the operation.</p>
2053    TooManyRequests(String),
2054}
2055
2056impl DeleteConfigurationSetEventDestinationError {
2057    pub fn from_response(
2058        res: BufferedHttpResponse,
2059    ) -> RusotoError<DeleteConfigurationSetEventDestinationError> {
2060        if let Some(err) = proto::json::Error::parse_rest(&res) {
2061            match err.typ.as_str() {
2062                "BadRequestException" => {
2063                    return RusotoError::Service(
2064                        DeleteConfigurationSetEventDestinationError::BadRequest(err.msg),
2065                    )
2066                }
2067                "NotFoundException" => {
2068                    return RusotoError::Service(
2069                        DeleteConfigurationSetEventDestinationError::NotFound(err.msg),
2070                    )
2071                }
2072                "TooManyRequestsException" => {
2073                    return RusotoError::Service(
2074                        DeleteConfigurationSetEventDestinationError::TooManyRequests(err.msg),
2075                    )
2076                }
2077                "ValidationException" => return RusotoError::Validation(err.msg),
2078                _ => {}
2079            }
2080        }
2081        RusotoError::Unknown(res)
2082    }
2083}
2084impl fmt::Display for DeleteConfigurationSetEventDestinationError {
2085    #[allow(unused_variables)]
2086    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2087        match *self {
2088            DeleteConfigurationSetEventDestinationError::BadRequest(ref cause) => {
2089                write!(f, "{}", cause)
2090            }
2091            DeleteConfigurationSetEventDestinationError::NotFound(ref cause) => {
2092                write!(f, "{}", cause)
2093            }
2094            DeleteConfigurationSetEventDestinationError::TooManyRequests(ref cause) => {
2095                write!(f, "{}", cause)
2096            }
2097        }
2098    }
2099}
2100impl Error for DeleteConfigurationSetEventDestinationError {}
2101/// Errors returned by DeleteDedicatedIpPool
2102#[derive(Debug, PartialEq)]
2103pub enum DeleteDedicatedIpPoolError {
2104    /// <p>The input you provided is invalid.</p>
2105    BadRequest(String),
2106    /// <p>The resource is being modified by another operation or thread.</p>
2107    ConcurrentModification(String),
2108    /// <p>The resource you attempted to access doesn't exist.</p>
2109    NotFound(String),
2110    /// <p>Too many requests have been made to the operation.</p>
2111    TooManyRequests(String),
2112}
2113
2114impl DeleteDedicatedIpPoolError {
2115    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteDedicatedIpPoolError> {
2116        if let Some(err) = proto::json::Error::parse_rest(&res) {
2117            match err.typ.as_str() {
2118                "BadRequestException" => {
2119                    return RusotoError::Service(DeleteDedicatedIpPoolError::BadRequest(err.msg))
2120                }
2121                "ConcurrentModificationException" => {
2122                    return RusotoError::Service(
2123                        DeleteDedicatedIpPoolError::ConcurrentModification(err.msg),
2124                    )
2125                }
2126                "NotFoundException" => {
2127                    return RusotoError::Service(DeleteDedicatedIpPoolError::NotFound(err.msg))
2128                }
2129                "TooManyRequestsException" => {
2130                    return RusotoError::Service(DeleteDedicatedIpPoolError::TooManyRequests(
2131                        err.msg,
2132                    ))
2133                }
2134                "ValidationException" => return RusotoError::Validation(err.msg),
2135                _ => {}
2136            }
2137        }
2138        RusotoError::Unknown(res)
2139    }
2140}
2141impl fmt::Display for DeleteDedicatedIpPoolError {
2142    #[allow(unused_variables)]
2143    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2144        match *self {
2145            DeleteDedicatedIpPoolError::BadRequest(ref cause) => write!(f, "{}", cause),
2146            DeleteDedicatedIpPoolError::ConcurrentModification(ref cause) => write!(f, "{}", cause),
2147            DeleteDedicatedIpPoolError::NotFound(ref cause) => write!(f, "{}", cause),
2148            DeleteDedicatedIpPoolError::TooManyRequests(ref cause) => write!(f, "{}", cause),
2149        }
2150    }
2151}
2152impl Error for DeleteDedicatedIpPoolError {}
2153/// Errors returned by DeleteEmailIdentity
2154#[derive(Debug, PartialEq)]
2155pub enum DeleteEmailIdentityError {
2156    /// <p>The input you provided is invalid.</p>
2157    BadRequest(String),
2158    /// <p>The resource is being modified by another operation or thread.</p>
2159    ConcurrentModification(String),
2160    /// <p>The resource you attempted to access doesn't exist.</p>
2161    NotFound(String),
2162    /// <p>Too many requests have been made to the operation.</p>
2163    TooManyRequests(String),
2164}
2165
2166impl DeleteEmailIdentityError {
2167    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteEmailIdentityError> {
2168        if let Some(err) = proto::json::Error::parse_rest(&res) {
2169            match err.typ.as_str() {
2170                "BadRequestException" => {
2171                    return RusotoError::Service(DeleteEmailIdentityError::BadRequest(err.msg))
2172                }
2173                "ConcurrentModificationException" => {
2174                    return RusotoError::Service(DeleteEmailIdentityError::ConcurrentModification(
2175                        err.msg,
2176                    ))
2177                }
2178                "NotFoundException" => {
2179                    return RusotoError::Service(DeleteEmailIdentityError::NotFound(err.msg))
2180                }
2181                "TooManyRequestsException" => {
2182                    return RusotoError::Service(DeleteEmailIdentityError::TooManyRequests(err.msg))
2183                }
2184                "ValidationException" => return RusotoError::Validation(err.msg),
2185                _ => {}
2186            }
2187        }
2188        RusotoError::Unknown(res)
2189    }
2190}
2191impl fmt::Display for DeleteEmailIdentityError {
2192    #[allow(unused_variables)]
2193    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2194        match *self {
2195            DeleteEmailIdentityError::BadRequest(ref cause) => write!(f, "{}", cause),
2196            DeleteEmailIdentityError::ConcurrentModification(ref cause) => write!(f, "{}", cause),
2197            DeleteEmailIdentityError::NotFound(ref cause) => write!(f, "{}", cause),
2198            DeleteEmailIdentityError::TooManyRequests(ref cause) => write!(f, "{}", cause),
2199        }
2200    }
2201}
2202impl Error for DeleteEmailIdentityError {}
2203/// Errors returned by GetAccount
2204#[derive(Debug, PartialEq)]
2205pub enum GetAccountError {
2206    /// <p>The input you provided is invalid.</p>
2207    BadRequest(String),
2208    /// <p>Too many requests have been made to the operation.</p>
2209    TooManyRequests(String),
2210}
2211
2212impl GetAccountError {
2213    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetAccountError> {
2214        if let Some(err) = proto::json::Error::parse_rest(&res) {
2215            match err.typ.as_str() {
2216                "BadRequestException" => {
2217                    return RusotoError::Service(GetAccountError::BadRequest(err.msg))
2218                }
2219                "TooManyRequestsException" => {
2220                    return RusotoError::Service(GetAccountError::TooManyRequests(err.msg))
2221                }
2222                "ValidationException" => return RusotoError::Validation(err.msg),
2223                _ => {}
2224            }
2225        }
2226        RusotoError::Unknown(res)
2227    }
2228}
2229impl fmt::Display for GetAccountError {
2230    #[allow(unused_variables)]
2231    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2232        match *self {
2233            GetAccountError::BadRequest(ref cause) => write!(f, "{}", cause),
2234            GetAccountError::TooManyRequests(ref cause) => write!(f, "{}", cause),
2235        }
2236    }
2237}
2238impl Error for GetAccountError {}
2239/// Errors returned by GetBlacklistReports
2240#[derive(Debug, PartialEq)]
2241pub enum GetBlacklistReportsError {
2242    /// <p>The input you provided is invalid.</p>
2243    BadRequest(String),
2244    /// <p>The resource you attempted to access doesn't exist.</p>
2245    NotFound(String),
2246    /// <p>Too many requests have been made to the operation.</p>
2247    TooManyRequests(String),
2248}
2249
2250impl GetBlacklistReportsError {
2251    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetBlacklistReportsError> {
2252        if let Some(err) = proto::json::Error::parse_rest(&res) {
2253            match err.typ.as_str() {
2254                "BadRequestException" => {
2255                    return RusotoError::Service(GetBlacklistReportsError::BadRequest(err.msg))
2256                }
2257                "NotFoundException" => {
2258                    return RusotoError::Service(GetBlacklistReportsError::NotFound(err.msg))
2259                }
2260                "TooManyRequestsException" => {
2261                    return RusotoError::Service(GetBlacklistReportsError::TooManyRequests(err.msg))
2262                }
2263                "ValidationException" => return RusotoError::Validation(err.msg),
2264                _ => {}
2265            }
2266        }
2267        RusotoError::Unknown(res)
2268    }
2269}
2270impl fmt::Display for GetBlacklistReportsError {
2271    #[allow(unused_variables)]
2272    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2273        match *self {
2274            GetBlacklistReportsError::BadRequest(ref cause) => write!(f, "{}", cause),
2275            GetBlacklistReportsError::NotFound(ref cause) => write!(f, "{}", cause),
2276            GetBlacklistReportsError::TooManyRequests(ref cause) => write!(f, "{}", cause),
2277        }
2278    }
2279}
2280impl Error for GetBlacklistReportsError {}
2281/// Errors returned by GetConfigurationSet
2282#[derive(Debug, PartialEq)]
2283pub enum GetConfigurationSetError {
2284    /// <p>The input you provided is invalid.</p>
2285    BadRequest(String),
2286    /// <p>The resource you attempted to access doesn't exist.</p>
2287    NotFound(String),
2288    /// <p>Too many requests have been made to the operation.</p>
2289    TooManyRequests(String),
2290}
2291
2292impl GetConfigurationSetError {
2293    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetConfigurationSetError> {
2294        if let Some(err) = proto::json::Error::parse_rest(&res) {
2295            match err.typ.as_str() {
2296                "BadRequestException" => {
2297                    return RusotoError::Service(GetConfigurationSetError::BadRequest(err.msg))
2298                }
2299                "NotFoundException" => {
2300                    return RusotoError::Service(GetConfigurationSetError::NotFound(err.msg))
2301                }
2302                "TooManyRequestsException" => {
2303                    return RusotoError::Service(GetConfigurationSetError::TooManyRequests(err.msg))
2304                }
2305                "ValidationException" => return RusotoError::Validation(err.msg),
2306                _ => {}
2307            }
2308        }
2309        RusotoError::Unknown(res)
2310    }
2311}
2312impl fmt::Display for GetConfigurationSetError {
2313    #[allow(unused_variables)]
2314    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2315        match *self {
2316            GetConfigurationSetError::BadRequest(ref cause) => write!(f, "{}", cause),
2317            GetConfigurationSetError::NotFound(ref cause) => write!(f, "{}", cause),
2318            GetConfigurationSetError::TooManyRequests(ref cause) => write!(f, "{}", cause),
2319        }
2320    }
2321}
2322impl Error for GetConfigurationSetError {}
2323/// Errors returned by GetConfigurationSetEventDestinations
2324#[derive(Debug, PartialEq)]
2325pub enum GetConfigurationSetEventDestinationsError {
2326    /// <p>The input you provided is invalid.</p>
2327    BadRequest(String),
2328    /// <p>The resource you attempted to access doesn't exist.</p>
2329    NotFound(String),
2330    /// <p>Too many requests have been made to the operation.</p>
2331    TooManyRequests(String),
2332}
2333
2334impl GetConfigurationSetEventDestinationsError {
2335    pub fn from_response(
2336        res: BufferedHttpResponse,
2337    ) -> RusotoError<GetConfigurationSetEventDestinationsError> {
2338        if let Some(err) = proto::json::Error::parse_rest(&res) {
2339            match err.typ.as_str() {
2340                "BadRequestException" => {
2341                    return RusotoError::Service(
2342                        GetConfigurationSetEventDestinationsError::BadRequest(err.msg),
2343                    )
2344                }
2345                "NotFoundException" => {
2346                    return RusotoError::Service(
2347                        GetConfigurationSetEventDestinationsError::NotFound(err.msg),
2348                    )
2349                }
2350                "TooManyRequestsException" => {
2351                    return RusotoError::Service(
2352                        GetConfigurationSetEventDestinationsError::TooManyRequests(err.msg),
2353                    )
2354                }
2355                "ValidationException" => return RusotoError::Validation(err.msg),
2356                _ => {}
2357            }
2358        }
2359        RusotoError::Unknown(res)
2360    }
2361}
2362impl fmt::Display for GetConfigurationSetEventDestinationsError {
2363    #[allow(unused_variables)]
2364    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2365        match *self {
2366            GetConfigurationSetEventDestinationsError::BadRequest(ref cause) => {
2367                write!(f, "{}", cause)
2368            }
2369            GetConfigurationSetEventDestinationsError::NotFound(ref cause) => {
2370                write!(f, "{}", cause)
2371            }
2372            GetConfigurationSetEventDestinationsError::TooManyRequests(ref cause) => {
2373                write!(f, "{}", cause)
2374            }
2375        }
2376    }
2377}
2378impl Error for GetConfigurationSetEventDestinationsError {}
2379/// Errors returned by GetDedicatedIp
2380#[derive(Debug, PartialEq)]
2381pub enum GetDedicatedIpError {
2382    /// <p>The input you provided is invalid.</p>
2383    BadRequest(String),
2384    /// <p>The resource you attempted to access doesn't exist.</p>
2385    NotFound(String),
2386    /// <p>Too many requests have been made to the operation.</p>
2387    TooManyRequests(String),
2388}
2389
2390impl GetDedicatedIpError {
2391    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetDedicatedIpError> {
2392        if let Some(err) = proto::json::Error::parse_rest(&res) {
2393            match err.typ.as_str() {
2394                "BadRequestException" => {
2395                    return RusotoError::Service(GetDedicatedIpError::BadRequest(err.msg))
2396                }
2397                "NotFoundException" => {
2398                    return RusotoError::Service(GetDedicatedIpError::NotFound(err.msg))
2399                }
2400                "TooManyRequestsException" => {
2401                    return RusotoError::Service(GetDedicatedIpError::TooManyRequests(err.msg))
2402                }
2403                "ValidationException" => return RusotoError::Validation(err.msg),
2404                _ => {}
2405            }
2406        }
2407        RusotoError::Unknown(res)
2408    }
2409}
2410impl fmt::Display for GetDedicatedIpError {
2411    #[allow(unused_variables)]
2412    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2413        match *self {
2414            GetDedicatedIpError::BadRequest(ref cause) => write!(f, "{}", cause),
2415            GetDedicatedIpError::NotFound(ref cause) => write!(f, "{}", cause),
2416            GetDedicatedIpError::TooManyRequests(ref cause) => write!(f, "{}", cause),
2417        }
2418    }
2419}
2420impl Error for GetDedicatedIpError {}
2421/// Errors returned by GetDedicatedIps
2422#[derive(Debug, PartialEq)]
2423pub enum GetDedicatedIpsError {
2424    /// <p>The input you provided is invalid.</p>
2425    BadRequest(String),
2426    /// <p>The resource you attempted to access doesn't exist.</p>
2427    NotFound(String),
2428    /// <p>Too many requests have been made to the operation.</p>
2429    TooManyRequests(String),
2430}
2431
2432impl GetDedicatedIpsError {
2433    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetDedicatedIpsError> {
2434        if let Some(err) = proto::json::Error::parse_rest(&res) {
2435            match err.typ.as_str() {
2436                "BadRequestException" => {
2437                    return RusotoError::Service(GetDedicatedIpsError::BadRequest(err.msg))
2438                }
2439                "NotFoundException" => {
2440                    return RusotoError::Service(GetDedicatedIpsError::NotFound(err.msg))
2441                }
2442                "TooManyRequestsException" => {
2443                    return RusotoError::Service(GetDedicatedIpsError::TooManyRequests(err.msg))
2444                }
2445                "ValidationException" => return RusotoError::Validation(err.msg),
2446                _ => {}
2447            }
2448        }
2449        RusotoError::Unknown(res)
2450    }
2451}
2452impl fmt::Display for GetDedicatedIpsError {
2453    #[allow(unused_variables)]
2454    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2455        match *self {
2456            GetDedicatedIpsError::BadRequest(ref cause) => write!(f, "{}", cause),
2457            GetDedicatedIpsError::NotFound(ref cause) => write!(f, "{}", cause),
2458            GetDedicatedIpsError::TooManyRequests(ref cause) => write!(f, "{}", cause),
2459        }
2460    }
2461}
2462impl Error for GetDedicatedIpsError {}
2463/// Errors returned by GetDeliverabilityDashboardOptions
2464#[derive(Debug, PartialEq)]
2465pub enum GetDeliverabilityDashboardOptionsError {
2466    /// <p>The input you provided is invalid.</p>
2467    BadRequest(String),
2468    /// <p>There are too many instances of the specified resource type.</p>
2469    LimitExceeded(String),
2470    /// <p>Too many requests have been made to the operation.</p>
2471    TooManyRequests(String),
2472}
2473
2474impl GetDeliverabilityDashboardOptionsError {
2475    pub fn from_response(
2476        res: BufferedHttpResponse,
2477    ) -> RusotoError<GetDeliverabilityDashboardOptionsError> {
2478        if let Some(err) = proto::json::Error::parse_rest(&res) {
2479            match err.typ.as_str() {
2480                "BadRequestException" => {
2481                    return RusotoError::Service(
2482                        GetDeliverabilityDashboardOptionsError::BadRequest(err.msg),
2483                    )
2484                }
2485                "LimitExceededException" => {
2486                    return RusotoError::Service(
2487                        GetDeliverabilityDashboardOptionsError::LimitExceeded(err.msg),
2488                    )
2489                }
2490                "TooManyRequestsException" => {
2491                    return RusotoError::Service(
2492                        GetDeliverabilityDashboardOptionsError::TooManyRequests(err.msg),
2493                    )
2494                }
2495                "ValidationException" => return RusotoError::Validation(err.msg),
2496                _ => {}
2497            }
2498        }
2499        RusotoError::Unknown(res)
2500    }
2501}
2502impl fmt::Display for GetDeliverabilityDashboardOptionsError {
2503    #[allow(unused_variables)]
2504    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2505        match *self {
2506            GetDeliverabilityDashboardOptionsError::BadRequest(ref cause) => write!(f, "{}", cause),
2507            GetDeliverabilityDashboardOptionsError::LimitExceeded(ref cause) => {
2508                write!(f, "{}", cause)
2509            }
2510            GetDeliverabilityDashboardOptionsError::TooManyRequests(ref cause) => {
2511                write!(f, "{}", cause)
2512            }
2513        }
2514    }
2515}
2516impl Error for GetDeliverabilityDashboardOptionsError {}
2517/// Errors returned by GetDeliverabilityTestReport
2518#[derive(Debug, PartialEq)]
2519pub enum GetDeliverabilityTestReportError {
2520    /// <p>The input you provided is invalid.</p>
2521    BadRequest(String),
2522    /// <p>The resource you attempted to access doesn't exist.</p>
2523    NotFound(String),
2524    /// <p>Too many requests have been made to the operation.</p>
2525    TooManyRequests(String),
2526}
2527
2528impl GetDeliverabilityTestReportError {
2529    pub fn from_response(
2530        res: BufferedHttpResponse,
2531    ) -> RusotoError<GetDeliverabilityTestReportError> {
2532        if let Some(err) = proto::json::Error::parse_rest(&res) {
2533            match err.typ.as_str() {
2534                "BadRequestException" => {
2535                    return RusotoError::Service(GetDeliverabilityTestReportError::BadRequest(
2536                        err.msg,
2537                    ))
2538                }
2539                "NotFoundException" => {
2540                    return RusotoError::Service(GetDeliverabilityTestReportError::NotFound(
2541                        err.msg,
2542                    ))
2543                }
2544                "TooManyRequestsException" => {
2545                    return RusotoError::Service(GetDeliverabilityTestReportError::TooManyRequests(
2546                        err.msg,
2547                    ))
2548                }
2549                "ValidationException" => return RusotoError::Validation(err.msg),
2550                _ => {}
2551            }
2552        }
2553        RusotoError::Unknown(res)
2554    }
2555}
2556impl fmt::Display for GetDeliverabilityTestReportError {
2557    #[allow(unused_variables)]
2558    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2559        match *self {
2560            GetDeliverabilityTestReportError::BadRequest(ref cause) => write!(f, "{}", cause),
2561            GetDeliverabilityTestReportError::NotFound(ref cause) => write!(f, "{}", cause),
2562            GetDeliverabilityTestReportError::TooManyRequests(ref cause) => write!(f, "{}", cause),
2563        }
2564    }
2565}
2566impl Error for GetDeliverabilityTestReportError {}
2567/// Errors returned by GetDomainDeliverabilityCampaign
2568#[derive(Debug, PartialEq)]
2569pub enum GetDomainDeliverabilityCampaignError {
2570    /// <p>The input you provided is invalid.</p>
2571    BadRequest(String),
2572    /// <p>The resource you attempted to access doesn't exist.</p>
2573    NotFound(String),
2574    /// <p>Too many requests have been made to the operation.</p>
2575    TooManyRequests(String),
2576}
2577
2578impl GetDomainDeliverabilityCampaignError {
2579    pub fn from_response(
2580        res: BufferedHttpResponse,
2581    ) -> RusotoError<GetDomainDeliverabilityCampaignError> {
2582        if let Some(err) = proto::json::Error::parse_rest(&res) {
2583            match err.typ.as_str() {
2584                "BadRequestException" => {
2585                    return RusotoError::Service(GetDomainDeliverabilityCampaignError::BadRequest(
2586                        err.msg,
2587                    ))
2588                }
2589                "NotFoundException" => {
2590                    return RusotoError::Service(GetDomainDeliverabilityCampaignError::NotFound(
2591                        err.msg,
2592                    ))
2593                }
2594                "TooManyRequestsException" => {
2595                    return RusotoError::Service(
2596                        GetDomainDeliverabilityCampaignError::TooManyRequests(err.msg),
2597                    )
2598                }
2599                "ValidationException" => return RusotoError::Validation(err.msg),
2600                _ => {}
2601            }
2602        }
2603        RusotoError::Unknown(res)
2604    }
2605}
2606impl fmt::Display for GetDomainDeliverabilityCampaignError {
2607    #[allow(unused_variables)]
2608    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2609        match *self {
2610            GetDomainDeliverabilityCampaignError::BadRequest(ref cause) => write!(f, "{}", cause),
2611            GetDomainDeliverabilityCampaignError::NotFound(ref cause) => write!(f, "{}", cause),
2612            GetDomainDeliverabilityCampaignError::TooManyRequests(ref cause) => {
2613                write!(f, "{}", cause)
2614            }
2615        }
2616    }
2617}
2618impl Error for GetDomainDeliverabilityCampaignError {}
2619/// Errors returned by GetDomainStatisticsReport
2620#[derive(Debug, PartialEq)]
2621pub enum GetDomainStatisticsReportError {
2622    /// <p>The input you provided is invalid.</p>
2623    BadRequest(String),
2624    /// <p>The resource you attempted to access doesn't exist.</p>
2625    NotFound(String),
2626    /// <p>Too many requests have been made to the operation.</p>
2627    TooManyRequests(String),
2628}
2629
2630impl GetDomainStatisticsReportError {
2631    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetDomainStatisticsReportError> {
2632        if let Some(err) = proto::json::Error::parse_rest(&res) {
2633            match err.typ.as_str() {
2634                "BadRequestException" => {
2635                    return RusotoError::Service(GetDomainStatisticsReportError::BadRequest(
2636                        err.msg,
2637                    ))
2638                }
2639                "NotFoundException" => {
2640                    return RusotoError::Service(GetDomainStatisticsReportError::NotFound(err.msg))
2641                }
2642                "TooManyRequestsException" => {
2643                    return RusotoError::Service(GetDomainStatisticsReportError::TooManyRequests(
2644                        err.msg,
2645                    ))
2646                }
2647                "ValidationException" => return RusotoError::Validation(err.msg),
2648                _ => {}
2649            }
2650        }
2651        RusotoError::Unknown(res)
2652    }
2653}
2654impl fmt::Display for GetDomainStatisticsReportError {
2655    #[allow(unused_variables)]
2656    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2657        match *self {
2658            GetDomainStatisticsReportError::BadRequest(ref cause) => write!(f, "{}", cause),
2659            GetDomainStatisticsReportError::NotFound(ref cause) => write!(f, "{}", cause),
2660            GetDomainStatisticsReportError::TooManyRequests(ref cause) => write!(f, "{}", cause),
2661        }
2662    }
2663}
2664impl Error for GetDomainStatisticsReportError {}
2665/// Errors returned by GetEmailIdentity
2666#[derive(Debug, PartialEq)]
2667pub enum GetEmailIdentityError {
2668    /// <p>The input you provided is invalid.</p>
2669    BadRequest(String),
2670    /// <p>The resource you attempted to access doesn't exist.</p>
2671    NotFound(String),
2672    /// <p>Too many requests have been made to the operation.</p>
2673    TooManyRequests(String),
2674}
2675
2676impl GetEmailIdentityError {
2677    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetEmailIdentityError> {
2678        if let Some(err) = proto::json::Error::parse_rest(&res) {
2679            match err.typ.as_str() {
2680                "BadRequestException" => {
2681                    return RusotoError::Service(GetEmailIdentityError::BadRequest(err.msg))
2682                }
2683                "NotFoundException" => {
2684                    return RusotoError::Service(GetEmailIdentityError::NotFound(err.msg))
2685                }
2686                "TooManyRequestsException" => {
2687                    return RusotoError::Service(GetEmailIdentityError::TooManyRequests(err.msg))
2688                }
2689                "ValidationException" => return RusotoError::Validation(err.msg),
2690                _ => {}
2691            }
2692        }
2693        RusotoError::Unknown(res)
2694    }
2695}
2696impl fmt::Display for GetEmailIdentityError {
2697    #[allow(unused_variables)]
2698    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2699        match *self {
2700            GetEmailIdentityError::BadRequest(ref cause) => write!(f, "{}", cause),
2701            GetEmailIdentityError::NotFound(ref cause) => write!(f, "{}", cause),
2702            GetEmailIdentityError::TooManyRequests(ref cause) => write!(f, "{}", cause),
2703        }
2704    }
2705}
2706impl Error for GetEmailIdentityError {}
2707/// Errors returned by ListConfigurationSets
2708#[derive(Debug, PartialEq)]
2709pub enum ListConfigurationSetsError {
2710    /// <p>The input you provided is invalid.</p>
2711    BadRequest(String),
2712    /// <p>Too many requests have been made to the operation.</p>
2713    TooManyRequests(String),
2714}
2715
2716impl ListConfigurationSetsError {
2717    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListConfigurationSetsError> {
2718        if let Some(err) = proto::json::Error::parse_rest(&res) {
2719            match err.typ.as_str() {
2720                "BadRequestException" => {
2721                    return RusotoError::Service(ListConfigurationSetsError::BadRequest(err.msg))
2722                }
2723                "TooManyRequestsException" => {
2724                    return RusotoError::Service(ListConfigurationSetsError::TooManyRequests(
2725                        err.msg,
2726                    ))
2727                }
2728                "ValidationException" => return RusotoError::Validation(err.msg),
2729                _ => {}
2730            }
2731        }
2732        RusotoError::Unknown(res)
2733    }
2734}
2735impl fmt::Display for ListConfigurationSetsError {
2736    #[allow(unused_variables)]
2737    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2738        match *self {
2739            ListConfigurationSetsError::BadRequest(ref cause) => write!(f, "{}", cause),
2740            ListConfigurationSetsError::TooManyRequests(ref cause) => write!(f, "{}", cause),
2741        }
2742    }
2743}
2744impl Error for ListConfigurationSetsError {}
2745/// Errors returned by ListDedicatedIpPools
2746#[derive(Debug, PartialEq)]
2747pub enum ListDedicatedIpPoolsError {
2748    /// <p>The input you provided is invalid.</p>
2749    BadRequest(String),
2750    /// <p>Too many requests have been made to the operation.</p>
2751    TooManyRequests(String),
2752}
2753
2754impl ListDedicatedIpPoolsError {
2755    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListDedicatedIpPoolsError> {
2756        if let Some(err) = proto::json::Error::parse_rest(&res) {
2757            match err.typ.as_str() {
2758                "BadRequestException" => {
2759                    return RusotoError::Service(ListDedicatedIpPoolsError::BadRequest(err.msg))
2760                }
2761                "TooManyRequestsException" => {
2762                    return RusotoError::Service(ListDedicatedIpPoolsError::TooManyRequests(
2763                        err.msg,
2764                    ))
2765                }
2766                "ValidationException" => return RusotoError::Validation(err.msg),
2767                _ => {}
2768            }
2769        }
2770        RusotoError::Unknown(res)
2771    }
2772}
2773impl fmt::Display for ListDedicatedIpPoolsError {
2774    #[allow(unused_variables)]
2775    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2776        match *self {
2777            ListDedicatedIpPoolsError::BadRequest(ref cause) => write!(f, "{}", cause),
2778            ListDedicatedIpPoolsError::TooManyRequests(ref cause) => write!(f, "{}", cause),
2779        }
2780    }
2781}
2782impl Error for ListDedicatedIpPoolsError {}
2783/// Errors returned by ListDeliverabilityTestReports
2784#[derive(Debug, PartialEq)]
2785pub enum ListDeliverabilityTestReportsError {
2786    /// <p>The input you provided is invalid.</p>
2787    BadRequest(String),
2788    /// <p>The resource you attempted to access doesn't exist.</p>
2789    NotFound(String),
2790    /// <p>Too many requests have been made to the operation.</p>
2791    TooManyRequests(String),
2792}
2793
2794impl ListDeliverabilityTestReportsError {
2795    pub fn from_response(
2796        res: BufferedHttpResponse,
2797    ) -> RusotoError<ListDeliverabilityTestReportsError> {
2798        if let Some(err) = proto::json::Error::parse_rest(&res) {
2799            match err.typ.as_str() {
2800                "BadRequestException" => {
2801                    return RusotoError::Service(ListDeliverabilityTestReportsError::BadRequest(
2802                        err.msg,
2803                    ))
2804                }
2805                "NotFoundException" => {
2806                    return RusotoError::Service(ListDeliverabilityTestReportsError::NotFound(
2807                        err.msg,
2808                    ))
2809                }
2810                "TooManyRequestsException" => {
2811                    return RusotoError::Service(
2812                        ListDeliverabilityTestReportsError::TooManyRequests(err.msg),
2813                    )
2814                }
2815                "ValidationException" => return RusotoError::Validation(err.msg),
2816                _ => {}
2817            }
2818        }
2819        RusotoError::Unknown(res)
2820    }
2821}
2822impl fmt::Display for ListDeliverabilityTestReportsError {
2823    #[allow(unused_variables)]
2824    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2825        match *self {
2826            ListDeliverabilityTestReportsError::BadRequest(ref cause) => write!(f, "{}", cause),
2827            ListDeliverabilityTestReportsError::NotFound(ref cause) => write!(f, "{}", cause),
2828            ListDeliverabilityTestReportsError::TooManyRequests(ref cause) => {
2829                write!(f, "{}", cause)
2830            }
2831        }
2832    }
2833}
2834impl Error for ListDeliverabilityTestReportsError {}
2835/// Errors returned by ListDomainDeliverabilityCampaigns
2836#[derive(Debug, PartialEq)]
2837pub enum ListDomainDeliverabilityCampaignsError {
2838    /// <p>The input you provided is invalid.</p>
2839    BadRequest(String),
2840    /// <p>The resource you attempted to access doesn't exist.</p>
2841    NotFound(String),
2842    /// <p>Too many requests have been made to the operation.</p>
2843    TooManyRequests(String),
2844}
2845
2846impl ListDomainDeliverabilityCampaignsError {
2847    pub fn from_response(
2848        res: BufferedHttpResponse,
2849    ) -> RusotoError<ListDomainDeliverabilityCampaignsError> {
2850        if let Some(err) = proto::json::Error::parse_rest(&res) {
2851            match err.typ.as_str() {
2852                "BadRequestException" => {
2853                    return RusotoError::Service(
2854                        ListDomainDeliverabilityCampaignsError::BadRequest(err.msg),
2855                    )
2856                }
2857                "NotFoundException" => {
2858                    return RusotoError::Service(ListDomainDeliverabilityCampaignsError::NotFound(
2859                        err.msg,
2860                    ))
2861                }
2862                "TooManyRequestsException" => {
2863                    return RusotoError::Service(
2864                        ListDomainDeliverabilityCampaignsError::TooManyRequests(err.msg),
2865                    )
2866                }
2867                "ValidationException" => return RusotoError::Validation(err.msg),
2868                _ => {}
2869            }
2870        }
2871        RusotoError::Unknown(res)
2872    }
2873}
2874impl fmt::Display for ListDomainDeliverabilityCampaignsError {
2875    #[allow(unused_variables)]
2876    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2877        match *self {
2878            ListDomainDeliverabilityCampaignsError::BadRequest(ref cause) => write!(f, "{}", cause),
2879            ListDomainDeliverabilityCampaignsError::NotFound(ref cause) => write!(f, "{}", cause),
2880            ListDomainDeliverabilityCampaignsError::TooManyRequests(ref cause) => {
2881                write!(f, "{}", cause)
2882            }
2883        }
2884    }
2885}
2886impl Error for ListDomainDeliverabilityCampaignsError {}
2887/// Errors returned by ListEmailIdentities
2888#[derive(Debug, PartialEq)]
2889pub enum ListEmailIdentitiesError {
2890    /// <p>The input you provided is invalid.</p>
2891    BadRequest(String),
2892    /// <p>Too many requests have been made to the operation.</p>
2893    TooManyRequests(String),
2894}
2895
2896impl ListEmailIdentitiesError {
2897    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListEmailIdentitiesError> {
2898        if let Some(err) = proto::json::Error::parse_rest(&res) {
2899            match err.typ.as_str() {
2900                "BadRequestException" => {
2901                    return RusotoError::Service(ListEmailIdentitiesError::BadRequest(err.msg))
2902                }
2903                "TooManyRequestsException" => {
2904                    return RusotoError::Service(ListEmailIdentitiesError::TooManyRequests(err.msg))
2905                }
2906                "ValidationException" => return RusotoError::Validation(err.msg),
2907                _ => {}
2908            }
2909        }
2910        RusotoError::Unknown(res)
2911    }
2912}
2913impl fmt::Display for ListEmailIdentitiesError {
2914    #[allow(unused_variables)]
2915    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2916        match *self {
2917            ListEmailIdentitiesError::BadRequest(ref cause) => write!(f, "{}", cause),
2918            ListEmailIdentitiesError::TooManyRequests(ref cause) => write!(f, "{}", cause),
2919        }
2920    }
2921}
2922impl Error for ListEmailIdentitiesError {}
2923/// Errors returned by ListTagsForResource
2924#[derive(Debug, PartialEq)]
2925pub enum ListTagsForResourceError {
2926    /// <p>The input you provided is invalid.</p>
2927    BadRequest(String),
2928    /// <p>The resource you attempted to access doesn't exist.</p>
2929    NotFound(String),
2930    /// <p>Too many requests have been made to the operation.</p>
2931    TooManyRequests(String),
2932}
2933
2934impl ListTagsForResourceError {
2935    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListTagsForResourceError> {
2936        if let Some(err) = proto::json::Error::parse_rest(&res) {
2937            match err.typ.as_str() {
2938                "BadRequestException" => {
2939                    return RusotoError::Service(ListTagsForResourceError::BadRequest(err.msg))
2940                }
2941                "NotFoundException" => {
2942                    return RusotoError::Service(ListTagsForResourceError::NotFound(err.msg))
2943                }
2944                "TooManyRequestsException" => {
2945                    return RusotoError::Service(ListTagsForResourceError::TooManyRequests(err.msg))
2946                }
2947                "ValidationException" => return RusotoError::Validation(err.msg),
2948                _ => {}
2949            }
2950        }
2951        RusotoError::Unknown(res)
2952    }
2953}
2954impl fmt::Display for ListTagsForResourceError {
2955    #[allow(unused_variables)]
2956    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2957        match *self {
2958            ListTagsForResourceError::BadRequest(ref cause) => write!(f, "{}", cause),
2959            ListTagsForResourceError::NotFound(ref cause) => write!(f, "{}", cause),
2960            ListTagsForResourceError::TooManyRequests(ref cause) => write!(f, "{}", cause),
2961        }
2962    }
2963}
2964impl Error for ListTagsForResourceError {}
2965/// Errors returned by PutAccountDedicatedIpWarmupAttributes
2966#[derive(Debug, PartialEq)]
2967pub enum PutAccountDedicatedIpWarmupAttributesError {
2968    /// <p>The input you provided is invalid.</p>
2969    BadRequest(String),
2970    /// <p>Too many requests have been made to the operation.</p>
2971    TooManyRequests(String),
2972}
2973
2974impl PutAccountDedicatedIpWarmupAttributesError {
2975    pub fn from_response(
2976        res: BufferedHttpResponse,
2977    ) -> RusotoError<PutAccountDedicatedIpWarmupAttributesError> {
2978        if let Some(err) = proto::json::Error::parse_rest(&res) {
2979            match err.typ.as_str() {
2980                "BadRequestException" => {
2981                    return RusotoError::Service(
2982                        PutAccountDedicatedIpWarmupAttributesError::BadRequest(err.msg),
2983                    )
2984                }
2985                "TooManyRequestsException" => {
2986                    return RusotoError::Service(
2987                        PutAccountDedicatedIpWarmupAttributesError::TooManyRequests(err.msg),
2988                    )
2989                }
2990                "ValidationException" => return RusotoError::Validation(err.msg),
2991                _ => {}
2992            }
2993        }
2994        RusotoError::Unknown(res)
2995    }
2996}
2997impl fmt::Display for PutAccountDedicatedIpWarmupAttributesError {
2998    #[allow(unused_variables)]
2999    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3000        match *self {
3001            PutAccountDedicatedIpWarmupAttributesError::BadRequest(ref cause) => {
3002                write!(f, "{}", cause)
3003            }
3004            PutAccountDedicatedIpWarmupAttributesError::TooManyRequests(ref cause) => {
3005                write!(f, "{}", cause)
3006            }
3007        }
3008    }
3009}
3010impl Error for PutAccountDedicatedIpWarmupAttributesError {}
3011/// Errors returned by PutAccountSendingAttributes
3012#[derive(Debug, PartialEq)]
3013pub enum PutAccountSendingAttributesError {
3014    /// <p>The input you provided is invalid.</p>
3015    BadRequest(String),
3016    /// <p>Too many requests have been made to the operation.</p>
3017    TooManyRequests(String),
3018}
3019
3020impl PutAccountSendingAttributesError {
3021    pub fn from_response(
3022        res: BufferedHttpResponse,
3023    ) -> RusotoError<PutAccountSendingAttributesError> {
3024        if let Some(err) = proto::json::Error::parse_rest(&res) {
3025            match err.typ.as_str() {
3026                "BadRequestException" => {
3027                    return RusotoError::Service(PutAccountSendingAttributesError::BadRequest(
3028                        err.msg,
3029                    ))
3030                }
3031                "TooManyRequestsException" => {
3032                    return RusotoError::Service(PutAccountSendingAttributesError::TooManyRequests(
3033                        err.msg,
3034                    ))
3035                }
3036                "ValidationException" => return RusotoError::Validation(err.msg),
3037                _ => {}
3038            }
3039        }
3040        RusotoError::Unknown(res)
3041    }
3042}
3043impl fmt::Display for PutAccountSendingAttributesError {
3044    #[allow(unused_variables)]
3045    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3046        match *self {
3047            PutAccountSendingAttributesError::BadRequest(ref cause) => write!(f, "{}", cause),
3048            PutAccountSendingAttributesError::TooManyRequests(ref cause) => write!(f, "{}", cause),
3049        }
3050    }
3051}
3052impl Error for PutAccountSendingAttributesError {}
3053/// Errors returned by PutConfigurationSetDeliveryOptions
3054#[derive(Debug, PartialEq)]
3055pub enum PutConfigurationSetDeliveryOptionsError {
3056    /// <p>The input you provided is invalid.</p>
3057    BadRequest(String),
3058    /// <p>The resource you attempted to access doesn't exist.</p>
3059    NotFound(String),
3060    /// <p>Too many requests have been made to the operation.</p>
3061    TooManyRequests(String),
3062}
3063
3064impl PutConfigurationSetDeliveryOptionsError {
3065    pub fn from_response(
3066        res: BufferedHttpResponse,
3067    ) -> RusotoError<PutConfigurationSetDeliveryOptionsError> {
3068        if let Some(err) = proto::json::Error::parse_rest(&res) {
3069            match err.typ.as_str() {
3070                "BadRequestException" => {
3071                    return RusotoError::Service(
3072                        PutConfigurationSetDeliveryOptionsError::BadRequest(err.msg),
3073                    )
3074                }
3075                "NotFoundException" => {
3076                    return RusotoError::Service(PutConfigurationSetDeliveryOptionsError::NotFound(
3077                        err.msg,
3078                    ))
3079                }
3080                "TooManyRequestsException" => {
3081                    return RusotoError::Service(
3082                        PutConfigurationSetDeliveryOptionsError::TooManyRequests(err.msg),
3083                    )
3084                }
3085                "ValidationException" => return RusotoError::Validation(err.msg),
3086                _ => {}
3087            }
3088        }
3089        RusotoError::Unknown(res)
3090    }
3091}
3092impl fmt::Display for PutConfigurationSetDeliveryOptionsError {
3093    #[allow(unused_variables)]
3094    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3095        match *self {
3096            PutConfigurationSetDeliveryOptionsError::BadRequest(ref cause) => {
3097                write!(f, "{}", cause)
3098            }
3099            PutConfigurationSetDeliveryOptionsError::NotFound(ref cause) => write!(f, "{}", cause),
3100            PutConfigurationSetDeliveryOptionsError::TooManyRequests(ref cause) => {
3101                write!(f, "{}", cause)
3102            }
3103        }
3104    }
3105}
3106impl Error for PutConfigurationSetDeliveryOptionsError {}
3107/// Errors returned by PutConfigurationSetReputationOptions
3108#[derive(Debug, PartialEq)]
3109pub enum PutConfigurationSetReputationOptionsError {
3110    /// <p>The input you provided is invalid.</p>
3111    BadRequest(String),
3112    /// <p>The resource you attempted to access doesn't exist.</p>
3113    NotFound(String),
3114    /// <p>Too many requests have been made to the operation.</p>
3115    TooManyRequests(String),
3116}
3117
3118impl PutConfigurationSetReputationOptionsError {
3119    pub fn from_response(
3120        res: BufferedHttpResponse,
3121    ) -> RusotoError<PutConfigurationSetReputationOptionsError> {
3122        if let Some(err) = proto::json::Error::parse_rest(&res) {
3123            match err.typ.as_str() {
3124                "BadRequestException" => {
3125                    return RusotoError::Service(
3126                        PutConfigurationSetReputationOptionsError::BadRequest(err.msg),
3127                    )
3128                }
3129                "NotFoundException" => {
3130                    return RusotoError::Service(
3131                        PutConfigurationSetReputationOptionsError::NotFound(err.msg),
3132                    )
3133                }
3134                "TooManyRequestsException" => {
3135                    return RusotoError::Service(
3136                        PutConfigurationSetReputationOptionsError::TooManyRequests(err.msg),
3137                    )
3138                }
3139                "ValidationException" => return RusotoError::Validation(err.msg),
3140                _ => {}
3141            }
3142        }
3143        RusotoError::Unknown(res)
3144    }
3145}
3146impl fmt::Display for PutConfigurationSetReputationOptionsError {
3147    #[allow(unused_variables)]
3148    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3149        match *self {
3150            PutConfigurationSetReputationOptionsError::BadRequest(ref cause) => {
3151                write!(f, "{}", cause)
3152            }
3153            PutConfigurationSetReputationOptionsError::NotFound(ref cause) => {
3154                write!(f, "{}", cause)
3155            }
3156            PutConfigurationSetReputationOptionsError::TooManyRequests(ref cause) => {
3157                write!(f, "{}", cause)
3158            }
3159        }
3160    }
3161}
3162impl Error for PutConfigurationSetReputationOptionsError {}
3163/// Errors returned by PutConfigurationSetSendingOptions
3164#[derive(Debug, PartialEq)]
3165pub enum PutConfigurationSetSendingOptionsError {
3166    /// <p>The input you provided is invalid.</p>
3167    BadRequest(String),
3168    /// <p>The resource you attempted to access doesn't exist.</p>
3169    NotFound(String),
3170    /// <p>Too many requests have been made to the operation.</p>
3171    TooManyRequests(String),
3172}
3173
3174impl PutConfigurationSetSendingOptionsError {
3175    pub fn from_response(
3176        res: BufferedHttpResponse,
3177    ) -> RusotoError<PutConfigurationSetSendingOptionsError> {
3178        if let Some(err) = proto::json::Error::parse_rest(&res) {
3179            match err.typ.as_str() {
3180                "BadRequestException" => {
3181                    return RusotoError::Service(
3182                        PutConfigurationSetSendingOptionsError::BadRequest(err.msg),
3183                    )
3184                }
3185                "NotFoundException" => {
3186                    return RusotoError::Service(PutConfigurationSetSendingOptionsError::NotFound(
3187                        err.msg,
3188                    ))
3189                }
3190                "TooManyRequestsException" => {
3191                    return RusotoError::Service(
3192                        PutConfigurationSetSendingOptionsError::TooManyRequests(err.msg),
3193                    )
3194                }
3195                "ValidationException" => return RusotoError::Validation(err.msg),
3196                _ => {}
3197            }
3198        }
3199        RusotoError::Unknown(res)
3200    }
3201}
3202impl fmt::Display for PutConfigurationSetSendingOptionsError {
3203    #[allow(unused_variables)]
3204    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3205        match *self {
3206            PutConfigurationSetSendingOptionsError::BadRequest(ref cause) => write!(f, "{}", cause),
3207            PutConfigurationSetSendingOptionsError::NotFound(ref cause) => write!(f, "{}", cause),
3208            PutConfigurationSetSendingOptionsError::TooManyRequests(ref cause) => {
3209                write!(f, "{}", cause)
3210            }
3211        }
3212    }
3213}
3214impl Error for PutConfigurationSetSendingOptionsError {}
3215/// Errors returned by PutConfigurationSetTrackingOptions
3216#[derive(Debug, PartialEq)]
3217pub enum PutConfigurationSetTrackingOptionsError {
3218    /// <p>The input you provided is invalid.</p>
3219    BadRequest(String),
3220    /// <p>The resource you attempted to access doesn't exist.</p>
3221    NotFound(String),
3222    /// <p>Too many requests have been made to the operation.</p>
3223    TooManyRequests(String),
3224}
3225
3226impl PutConfigurationSetTrackingOptionsError {
3227    pub fn from_response(
3228        res: BufferedHttpResponse,
3229    ) -> RusotoError<PutConfigurationSetTrackingOptionsError> {
3230        if let Some(err) = proto::json::Error::parse_rest(&res) {
3231            match err.typ.as_str() {
3232                "BadRequestException" => {
3233                    return RusotoError::Service(
3234                        PutConfigurationSetTrackingOptionsError::BadRequest(err.msg),
3235                    )
3236                }
3237                "NotFoundException" => {
3238                    return RusotoError::Service(PutConfigurationSetTrackingOptionsError::NotFound(
3239                        err.msg,
3240                    ))
3241                }
3242                "TooManyRequestsException" => {
3243                    return RusotoError::Service(
3244                        PutConfigurationSetTrackingOptionsError::TooManyRequests(err.msg),
3245                    )
3246                }
3247                "ValidationException" => return RusotoError::Validation(err.msg),
3248                _ => {}
3249            }
3250        }
3251        RusotoError::Unknown(res)
3252    }
3253}
3254impl fmt::Display for PutConfigurationSetTrackingOptionsError {
3255    #[allow(unused_variables)]
3256    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3257        match *self {
3258            PutConfigurationSetTrackingOptionsError::BadRequest(ref cause) => {
3259                write!(f, "{}", cause)
3260            }
3261            PutConfigurationSetTrackingOptionsError::NotFound(ref cause) => write!(f, "{}", cause),
3262            PutConfigurationSetTrackingOptionsError::TooManyRequests(ref cause) => {
3263                write!(f, "{}", cause)
3264            }
3265        }
3266    }
3267}
3268impl Error for PutConfigurationSetTrackingOptionsError {}
3269/// Errors returned by PutDedicatedIpInPool
3270#[derive(Debug, PartialEq)]
3271pub enum PutDedicatedIpInPoolError {
3272    /// <p>The input you provided is invalid.</p>
3273    BadRequest(String),
3274    /// <p>The resource you attempted to access doesn't exist.</p>
3275    NotFound(String),
3276    /// <p>Too many requests have been made to the operation.</p>
3277    TooManyRequests(String),
3278}
3279
3280impl PutDedicatedIpInPoolError {
3281    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<PutDedicatedIpInPoolError> {
3282        if let Some(err) = proto::json::Error::parse_rest(&res) {
3283            match err.typ.as_str() {
3284                "BadRequestException" => {
3285                    return RusotoError::Service(PutDedicatedIpInPoolError::BadRequest(err.msg))
3286                }
3287                "NotFoundException" => {
3288                    return RusotoError::Service(PutDedicatedIpInPoolError::NotFound(err.msg))
3289                }
3290                "TooManyRequestsException" => {
3291                    return RusotoError::Service(PutDedicatedIpInPoolError::TooManyRequests(
3292                        err.msg,
3293                    ))
3294                }
3295                "ValidationException" => return RusotoError::Validation(err.msg),
3296                _ => {}
3297            }
3298        }
3299        RusotoError::Unknown(res)
3300    }
3301}
3302impl fmt::Display for PutDedicatedIpInPoolError {
3303    #[allow(unused_variables)]
3304    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3305        match *self {
3306            PutDedicatedIpInPoolError::BadRequest(ref cause) => write!(f, "{}", cause),
3307            PutDedicatedIpInPoolError::NotFound(ref cause) => write!(f, "{}", cause),
3308            PutDedicatedIpInPoolError::TooManyRequests(ref cause) => write!(f, "{}", cause),
3309        }
3310    }
3311}
3312impl Error for PutDedicatedIpInPoolError {}
3313/// Errors returned by PutDedicatedIpWarmupAttributes
3314#[derive(Debug, PartialEq)]
3315pub enum PutDedicatedIpWarmupAttributesError {
3316    /// <p>The input you provided is invalid.</p>
3317    BadRequest(String),
3318    /// <p>The resource you attempted to access doesn't exist.</p>
3319    NotFound(String),
3320    /// <p>Too many requests have been made to the operation.</p>
3321    TooManyRequests(String),
3322}
3323
3324impl PutDedicatedIpWarmupAttributesError {
3325    pub fn from_response(
3326        res: BufferedHttpResponse,
3327    ) -> RusotoError<PutDedicatedIpWarmupAttributesError> {
3328        if let Some(err) = proto::json::Error::parse_rest(&res) {
3329            match err.typ.as_str() {
3330                "BadRequestException" => {
3331                    return RusotoError::Service(PutDedicatedIpWarmupAttributesError::BadRequest(
3332                        err.msg,
3333                    ))
3334                }
3335                "NotFoundException" => {
3336                    return RusotoError::Service(PutDedicatedIpWarmupAttributesError::NotFound(
3337                        err.msg,
3338                    ))
3339                }
3340                "TooManyRequestsException" => {
3341                    return RusotoError::Service(
3342                        PutDedicatedIpWarmupAttributesError::TooManyRequests(err.msg),
3343                    )
3344                }
3345                "ValidationException" => return RusotoError::Validation(err.msg),
3346                _ => {}
3347            }
3348        }
3349        RusotoError::Unknown(res)
3350    }
3351}
3352impl fmt::Display for PutDedicatedIpWarmupAttributesError {
3353    #[allow(unused_variables)]
3354    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3355        match *self {
3356            PutDedicatedIpWarmupAttributesError::BadRequest(ref cause) => write!(f, "{}", cause),
3357            PutDedicatedIpWarmupAttributesError::NotFound(ref cause) => write!(f, "{}", cause),
3358            PutDedicatedIpWarmupAttributesError::TooManyRequests(ref cause) => {
3359                write!(f, "{}", cause)
3360            }
3361        }
3362    }
3363}
3364impl Error for PutDedicatedIpWarmupAttributesError {}
3365/// Errors returned by PutDeliverabilityDashboardOption
3366#[derive(Debug, PartialEq)]
3367pub enum PutDeliverabilityDashboardOptionError {
3368    /// <p>The resource specified in your request already exists.</p>
3369    AlreadyExists(String),
3370    /// <p>The input you provided is invalid.</p>
3371    BadRequest(String),
3372    /// <p>There are too many instances of the specified resource type.</p>
3373    LimitExceeded(String),
3374    /// <p>The resource you attempted to access doesn't exist.</p>
3375    NotFound(String),
3376    /// <p>Too many requests have been made to the operation.</p>
3377    TooManyRequests(String),
3378}
3379
3380impl PutDeliverabilityDashboardOptionError {
3381    pub fn from_response(
3382        res: BufferedHttpResponse,
3383    ) -> RusotoError<PutDeliverabilityDashboardOptionError> {
3384        if let Some(err) = proto::json::Error::parse_rest(&res) {
3385            match err.typ.as_str() {
3386                "AlreadyExistsException" => {
3387                    return RusotoError::Service(
3388                        PutDeliverabilityDashboardOptionError::AlreadyExists(err.msg),
3389                    )
3390                }
3391                "BadRequestException" => {
3392                    return RusotoError::Service(PutDeliverabilityDashboardOptionError::BadRequest(
3393                        err.msg,
3394                    ))
3395                }
3396                "LimitExceededException" => {
3397                    return RusotoError::Service(
3398                        PutDeliverabilityDashboardOptionError::LimitExceeded(err.msg),
3399                    )
3400                }
3401                "NotFoundException" => {
3402                    return RusotoError::Service(PutDeliverabilityDashboardOptionError::NotFound(
3403                        err.msg,
3404                    ))
3405                }
3406                "TooManyRequestsException" => {
3407                    return RusotoError::Service(
3408                        PutDeliverabilityDashboardOptionError::TooManyRequests(err.msg),
3409                    )
3410                }
3411                "ValidationException" => return RusotoError::Validation(err.msg),
3412                _ => {}
3413            }
3414        }
3415        RusotoError::Unknown(res)
3416    }
3417}
3418impl fmt::Display for PutDeliverabilityDashboardOptionError {
3419    #[allow(unused_variables)]
3420    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3421        match *self {
3422            PutDeliverabilityDashboardOptionError::AlreadyExists(ref cause) => {
3423                write!(f, "{}", cause)
3424            }
3425            PutDeliverabilityDashboardOptionError::BadRequest(ref cause) => write!(f, "{}", cause),
3426            PutDeliverabilityDashboardOptionError::LimitExceeded(ref cause) => {
3427                write!(f, "{}", cause)
3428            }
3429            PutDeliverabilityDashboardOptionError::NotFound(ref cause) => write!(f, "{}", cause),
3430            PutDeliverabilityDashboardOptionError::TooManyRequests(ref cause) => {
3431                write!(f, "{}", cause)
3432            }
3433        }
3434    }
3435}
3436impl Error for PutDeliverabilityDashboardOptionError {}
3437/// Errors returned by PutEmailIdentityDkimAttributes
3438#[derive(Debug, PartialEq)]
3439pub enum PutEmailIdentityDkimAttributesError {
3440    /// <p>The input you provided is invalid.</p>
3441    BadRequest(String),
3442    /// <p>The resource you attempted to access doesn't exist.</p>
3443    NotFound(String),
3444    /// <p>Too many requests have been made to the operation.</p>
3445    TooManyRequests(String),
3446}
3447
3448impl PutEmailIdentityDkimAttributesError {
3449    pub fn from_response(
3450        res: BufferedHttpResponse,
3451    ) -> RusotoError<PutEmailIdentityDkimAttributesError> {
3452        if let Some(err) = proto::json::Error::parse_rest(&res) {
3453            match err.typ.as_str() {
3454                "BadRequestException" => {
3455                    return RusotoError::Service(PutEmailIdentityDkimAttributesError::BadRequest(
3456                        err.msg,
3457                    ))
3458                }
3459                "NotFoundException" => {
3460                    return RusotoError::Service(PutEmailIdentityDkimAttributesError::NotFound(
3461                        err.msg,
3462                    ))
3463                }
3464                "TooManyRequestsException" => {
3465                    return RusotoError::Service(
3466                        PutEmailIdentityDkimAttributesError::TooManyRequests(err.msg),
3467                    )
3468                }
3469                "ValidationException" => return RusotoError::Validation(err.msg),
3470                _ => {}
3471            }
3472        }
3473        RusotoError::Unknown(res)
3474    }
3475}
3476impl fmt::Display for PutEmailIdentityDkimAttributesError {
3477    #[allow(unused_variables)]
3478    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3479        match *self {
3480            PutEmailIdentityDkimAttributesError::BadRequest(ref cause) => write!(f, "{}", cause),
3481            PutEmailIdentityDkimAttributesError::NotFound(ref cause) => write!(f, "{}", cause),
3482            PutEmailIdentityDkimAttributesError::TooManyRequests(ref cause) => {
3483                write!(f, "{}", cause)
3484            }
3485        }
3486    }
3487}
3488impl Error for PutEmailIdentityDkimAttributesError {}
3489/// Errors returned by PutEmailIdentityFeedbackAttributes
3490#[derive(Debug, PartialEq)]
3491pub enum PutEmailIdentityFeedbackAttributesError {
3492    /// <p>The input you provided is invalid.</p>
3493    BadRequest(String),
3494    /// <p>The resource you attempted to access doesn't exist.</p>
3495    NotFound(String),
3496    /// <p>Too many requests have been made to the operation.</p>
3497    TooManyRequests(String),
3498}
3499
3500impl PutEmailIdentityFeedbackAttributesError {
3501    pub fn from_response(
3502        res: BufferedHttpResponse,
3503    ) -> RusotoError<PutEmailIdentityFeedbackAttributesError> {
3504        if let Some(err) = proto::json::Error::parse_rest(&res) {
3505            match err.typ.as_str() {
3506                "BadRequestException" => {
3507                    return RusotoError::Service(
3508                        PutEmailIdentityFeedbackAttributesError::BadRequest(err.msg),
3509                    )
3510                }
3511                "NotFoundException" => {
3512                    return RusotoError::Service(PutEmailIdentityFeedbackAttributesError::NotFound(
3513                        err.msg,
3514                    ))
3515                }
3516                "TooManyRequestsException" => {
3517                    return RusotoError::Service(
3518                        PutEmailIdentityFeedbackAttributesError::TooManyRequests(err.msg),
3519                    )
3520                }
3521                "ValidationException" => return RusotoError::Validation(err.msg),
3522                _ => {}
3523            }
3524        }
3525        RusotoError::Unknown(res)
3526    }
3527}
3528impl fmt::Display for PutEmailIdentityFeedbackAttributesError {
3529    #[allow(unused_variables)]
3530    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3531        match *self {
3532            PutEmailIdentityFeedbackAttributesError::BadRequest(ref cause) => {
3533                write!(f, "{}", cause)
3534            }
3535            PutEmailIdentityFeedbackAttributesError::NotFound(ref cause) => write!(f, "{}", cause),
3536            PutEmailIdentityFeedbackAttributesError::TooManyRequests(ref cause) => {
3537                write!(f, "{}", cause)
3538            }
3539        }
3540    }
3541}
3542impl Error for PutEmailIdentityFeedbackAttributesError {}
3543/// Errors returned by PutEmailIdentityMailFromAttributes
3544#[derive(Debug, PartialEq)]
3545pub enum PutEmailIdentityMailFromAttributesError {
3546    /// <p>The input you provided is invalid.</p>
3547    BadRequest(String),
3548    /// <p>The resource you attempted to access doesn't exist.</p>
3549    NotFound(String),
3550    /// <p>Too many requests have been made to the operation.</p>
3551    TooManyRequests(String),
3552}
3553
3554impl PutEmailIdentityMailFromAttributesError {
3555    pub fn from_response(
3556        res: BufferedHttpResponse,
3557    ) -> RusotoError<PutEmailIdentityMailFromAttributesError> {
3558        if let Some(err) = proto::json::Error::parse_rest(&res) {
3559            match err.typ.as_str() {
3560                "BadRequestException" => {
3561                    return RusotoError::Service(
3562                        PutEmailIdentityMailFromAttributesError::BadRequest(err.msg),
3563                    )
3564                }
3565                "NotFoundException" => {
3566                    return RusotoError::Service(PutEmailIdentityMailFromAttributesError::NotFound(
3567                        err.msg,
3568                    ))
3569                }
3570                "TooManyRequestsException" => {
3571                    return RusotoError::Service(
3572                        PutEmailIdentityMailFromAttributesError::TooManyRequests(err.msg),
3573                    )
3574                }
3575                "ValidationException" => return RusotoError::Validation(err.msg),
3576                _ => {}
3577            }
3578        }
3579        RusotoError::Unknown(res)
3580    }
3581}
3582impl fmt::Display for PutEmailIdentityMailFromAttributesError {
3583    #[allow(unused_variables)]
3584    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3585        match *self {
3586            PutEmailIdentityMailFromAttributesError::BadRequest(ref cause) => {
3587                write!(f, "{}", cause)
3588            }
3589            PutEmailIdentityMailFromAttributesError::NotFound(ref cause) => write!(f, "{}", cause),
3590            PutEmailIdentityMailFromAttributesError::TooManyRequests(ref cause) => {
3591                write!(f, "{}", cause)
3592            }
3593        }
3594    }
3595}
3596impl Error for PutEmailIdentityMailFromAttributesError {}
3597/// Errors returned by SendEmail
3598#[derive(Debug, PartialEq)]
3599pub enum SendEmailError {
3600    /// <p>The message can't be sent because the account's ability to send email has been permanently restricted.</p>
3601    AccountSuspended(String),
3602    /// <p>The input you provided is invalid.</p>
3603    BadRequest(String),
3604    /// <p>There are too many instances of the specified resource type.</p>
3605    LimitExceeded(String),
3606    /// <p>The message can't be sent because the sending domain isn't verified.</p>
3607    MailFromDomainNotVerified(String),
3608    /// <p>The message can't be sent because it contains invalid content.</p>
3609    MessageRejected(String),
3610    /// <p>The resource you attempted to access doesn't exist.</p>
3611    NotFound(String),
3612    /// <p>The message can't be sent because the account's ability to send email is currently paused.</p>
3613    SendingPaused(String),
3614    /// <p>Too many requests have been made to the operation.</p>
3615    TooManyRequests(String),
3616}
3617
3618impl SendEmailError {
3619    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<SendEmailError> {
3620        if let Some(err) = proto::json::Error::parse_rest(&res) {
3621            match err.typ.as_str() {
3622                "AccountSuspendedException" => {
3623                    return RusotoError::Service(SendEmailError::AccountSuspended(err.msg))
3624                }
3625                "BadRequestException" => {
3626                    return RusotoError::Service(SendEmailError::BadRequest(err.msg))
3627                }
3628                "LimitExceededException" => {
3629                    return RusotoError::Service(SendEmailError::LimitExceeded(err.msg))
3630                }
3631                "MailFromDomainNotVerifiedException" => {
3632                    return RusotoError::Service(SendEmailError::MailFromDomainNotVerified(err.msg))
3633                }
3634                "MessageRejected" => {
3635                    return RusotoError::Service(SendEmailError::MessageRejected(err.msg))
3636                }
3637                "NotFoundException" => {
3638                    return RusotoError::Service(SendEmailError::NotFound(err.msg))
3639                }
3640                "SendingPausedException" => {
3641                    return RusotoError::Service(SendEmailError::SendingPaused(err.msg))
3642                }
3643                "TooManyRequestsException" => {
3644                    return RusotoError::Service(SendEmailError::TooManyRequests(err.msg))
3645                }
3646                "ValidationException" => return RusotoError::Validation(err.msg),
3647                _ => {}
3648            }
3649        }
3650        RusotoError::Unknown(res)
3651    }
3652}
3653impl fmt::Display for SendEmailError {
3654    #[allow(unused_variables)]
3655    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3656        match *self {
3657            SendEmailError::AccountSuspended(ref cause) => write!(f, "{}", cause),
3658            SendEmailError::BadRequest(ref cause) => write!(f, "{}", cause),
3659            SendEmailError::LimitExceeded(ref cause) => write!(f, "{}", cause),
3660            SendEmailError::MailFromDomainNotVerified(ref cause) => write!(f, "{}", cause),
3661            SendEmailError::MessageRejected(ref cause) => write!(f, "{}", cause),
3662            SendEmailError::NotFound(ref cause) => write!(f, "{}", cause),
3663            SendEmailError::SendingPaused(ref cause) => write!(f, "{}", cause),
3664            SendEmailError::TooManyRequests(ref cause) => write!(f, "{}", cause),
3665        }
3666    }
3667}
3668impl Error for SendEmailError {}
3669/// Errors returned by TagResource
3670#[derive(Debug, PartialEq)]
3671pub enum TagResourceError {
3672    /// <p>The input you provided is invalid.</p>
3673    BadRequest(String),
3674    /// <p>The resource is being modified by another operation or thread.</p>
3675    ConcurrentModification(String),
3676    /// <p>The resource you attempted to access doesn't exist.</p>
3677    NotFound(String),
3678    /// <p>Too many requests have been made to the operation.</p>
3679    TooManyRequests(String),
3680}
3681
3682impl TagResourceError {
3683    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<TagResourceError> {
3684        if let Some(err) = proto::json::Error::parse_rest(&res) {
3685            match err.typ.as_str() {
3686                "BadRequestException" => {
3687                    return RusotoError::Service(TagResourceError::BadRequest(err.msg))
3688                }
3689                "ConcurrentModificationException" => {
3690                    return RusotoError::Service(TagResourceError::ConcurrentModification(err.msg))
3691                }
3692                "NotFoundException" => {
3693                    return RusotoError::Service(TagResourceError::NotFound(err.msg))
3694                }
3695                "TooManyRequestsException" => {
3696                    return RusotoError::Service(TagResourceError::TooManyRequests(err.msg))
3697                }
3698                "ValidationException" => return RusotoError::Validation(err.msg),
3699                _ => {}
3700            }
3701        }
3702        RusotoError::Unknown(res)
3703    }
3704}
3705impl fmt::Display for TagResourceError {
3706    #[allow(unused_variables)]
3707    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3708        match *self {
3709            TagResourceError::BadRequest(ref cause) => write!(f, "{}", cause),
3710            TagResourceError::ConcurrentModification(ref cause) => write!(f, "{}", cause),
3711            TagResourceError::NotFound(ref cause) => write!(f, "{}", cause),
3712            TagResourceError::TooManyRequests(ref cause) => write!(f, "{}", cause),
3713        }
3714    }
3715}
3716impl Error for TagResourceError {}
3717/// Errors returned by UntagResource
3718#[derive(Debug, PartialEq)]
3719pub enum UntagResourceError {
3720    /// <p>The input you provided is invalid.</p>
3721    BadRequest(String),
3722    /// <p>The resource is being modified by another operation or thread.</p>
3723    ConcurrentModification(String),
3724    /// <p>The resource you attempted to access doesn't exist.</p>
3725    NotFound(String),
3726    /// <p>Too many requests have been made to the operation.</p>
3727    TooManyRequests(String),
3728}
3729
3730impl UntagResourceError {
3731    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UntagResourceError> {
3732        if let Some(err) = proto::json::Error::parse_rest(&res) {
3733            match err.typ.as_str() {
3734                "BadRequestException" => {
3735                    return RusotoError::Service(UntagResourceError::BadRequest(err.msg))
3736                }
3737                "ConcurrentModificationException" => {
3738                    return RusotoError::Service(UntagResourceError::ConcurrentModification(
3739                        err.msg,
3740                    ))
3741                }
3742                "NotFoundException" => {
3743                    return RusotoError::Service(UntagResourceError::NotFound(err.msg))
3744                }
3745                "TooManyRequestsException" => {
3746                    return RusotoError::Service(UntagResourceError::TooManyRequests(err.msg))
3747                }
3748                "ValidationException" => return RusotoError::Validation(err.msg),
3749                _ => {}
3750            }
3751        }
3752        RusotoError::Unknown(res)
3753    }
3754}
3755impl fmt::Display for UntagResourceError {
3756    #[allow(unused_variables)]
3757    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3758        match *self {
3759            UntagResourceError::BadRequest(ref cause) => write!(f, "{}", cause),
3760            UntagResourceError::ConcurrentModification(ref cause) => write!(f, "{}", cause),
3761            UntagResourceError::NotFound(ref cause) => write!(f, "{}", cause),
3762            UntagResourceError::TooManyRequests(ref cause) => write!(f, "{}", cause),
3763        }
3764    }
3765}
3766impl Error for UntagResourceError {}
3767/// Errors returned by UpdateConfigurationSetEventDestination
3768#[derive(Debug, PartialEq)]
3769pub enum UpdateConfigurationSetEventDestinationError {
3770    /// <p>The input you provided is invalid.</p>
3771    BadRequest(String),
3772    /// <p>The resource you attempted to access doesn't exist.</p>
3773    NotFound(String),
3774    /// <p>Too many requests have been made to the operation.</p>
3775    TooManyRequests(String),
3776}
3777
3778impl UpdateConfigurationSetEventDestinationError {
3779    pub fn from_response(
3780        res: BufferedHttpResponse,
3781    ) -> RusotoError<UpdateConfigurationSetEventDestinationError> {
3782        if let Some(err) = proto::json::Error::parse_rest(&res) {
3783            match err.typ.as_str() {
3784                "BadRequestException" => {
3785                    return RusotoError::Service(
3786                        UpdateConfigurationSetEventDestinationError::BadRequest(err.msg),
3787                    )
3788                }
3789                "NotFoundException" => {
3790                    return RusotoError::Service(
3791                        UpdateConfigurationSetEventDestinationError::NotFound(err.msg),
3792                    )
3793                }
3794                "TooManyRequestsException" => {
3795                    return RusotoError::Service(
3796                        UpdateConfigurationSetEventDestinationError::TooManyRequests(err.msg),
3797                    )
3798                }
3799                "ValidationException" => return RusotoError::Validation(err.msg),
3800                _ => {}
3801            }
3802        }
3803        RusotoError::Unknown(res)
3804    }
3805}
3806impl fmt::Display for UpdateConfigurationSetEventDestinationError {
3807    #[allow(unused_variables)]
3808    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3809        match *self {
3810            UpdateConfigurationSetEventDestinationError::BadRequest(ref cause) => {
3811                write!(f, "{}", cause)
3812            }
3813            UpdateConfigurationSetEventDestinationError::NotFound(ref cause) => {
3814                write!(f, "{}", cause)
3815            }
3816            UpdateConfigurationSetEventDestinationError::TooManyRequests(ref cause) => {
3817                write!(f, "{}", cause)
3818            }
3819        }
3820    }
3821}
3822impl Error for UpdateConfigurationSetEventDestinationError {}
3823/// Trait representing the capabilities of the Pinpoint Email API. Pinpoint Email clients implement this trait.
3824#[async_trait]
3825pub trait PinpointEmail {
3826    /// <p>Create a configuration set. <i>Configuration sets</i> are groups of rules that you can apply to the emails you send using Amazon Pinpoint. You apply a configuration set to an email by including a reference to the configuration set in the headers of the email. When you apply a configuration set to an email, all of the rules in that configuration set are applied to the email. </p>
3827    async fn create_configuration_set(
3828        &self,
3829        input: CreateConfigurationSetRequest,
3830    ) -> Result<CreateConfigurationSetResponse, RusotoError<CreateConfigurationSetError>>;
3831
3832    /// <p>Create an event destination. In Amazon Pinpoint, <i>events</i> include message sends, deliveries, opens, clicks, bounces, and complaints. <i>Event destinations</i> are places that you can send information about these events to. For example, you can send event data to Amazon SNS to receive notifications when you receive bounces or complaints, or you can use Amazon Kinesis Data Firehose to stream data to Amazon S3 for long-term storage.</p> <p>A single configuration set can include more than one event destination.</p>
3833    async fn create_configuration_set_event_destination(
3834        &self,
3835        input: CreateConfigurationSetEventDestinationRequest,
3836    ) -> Result<
3837        CreateConfigurationSetEventDestinationResponse,
3838        RusotoError<CreateConfigurationSetEventDestinationError>,
3839    >;
3840
3841    /// <p>Create a new pool of dedicated IP addresses. A pool can include one or more dedicated IP addresses that are associated with your Amazon Pinpoint account. You can associate a pool with a configuration set. When you send an email that uses that configuration set, Amazon Pinpoint sends it using only the IP addresses in the associated pool.</p>
3842    async fn create_dedicated_ip_pool(
3843        &self,
3844        input: CreateDedicatedIpPoolRequest,
3845    ) -> Result<CreateDedicatedIpPoolResponse, RusotoError<CreateDedicatedIpPoolError>>;
3846
3847    /// <p>Create a new predictive inbox placement test. Predictive inbox placement tests can help you predict how your messages will be handled by various email providers around the world. When you perform a predictive inbox placement test, you provide a sample message that contains the content that you plan to send to your customers. Amazon Pinpoint then sends that message to special email addresses spread across several major email providers. After about 24 hours, the test is complete, and you can use the <code>GetDeliverabilityTestReport</code> operation to view the results of the test.</p>
3848    async fn create_deliverability_test_report(
3849        &self,
3850        input: CreateDeliverabilityTestReportRequest,
3851    ) -> Result<
3852        CreateDeliverabilityTestReportResponse,
3853        RusotoError<CreateDeliverabilityTestReportError>,
3854    >;
3855
3856    /// <p>Verifies an email identity for use with Amazon Pinpoint. In Amazon Pinpoint, an identity is an email address or domain that you use when you send email. Before you can use an identity to send email with Amazon Pinpoint, you first have to verify it. By verifying an address, you demonstrate that you're the owner of the address, and that you've given Amazon Pinpoint permission to send email from the address.</p> <p>When you verify an email address, Amazon Pinpoint sends an email to the address. Your email address is verified as soon as you follow the link in the verification email. </p> <p>When you verify a domain, this operation provides a set of DKIM tokens, which you can convert into CNAME tokens. You add these CNAME tokens to the DNS configuration for your domain. Your domain is verified when Amazon Pinpoint detects these records in the DNS configuration for your domain. It usually takes around 72 hours to complete the domain verification process.</p>
3857    async fn create_email_identity(
3858        &self,
3859        input: CreateEmailIdentityRequest,
3860    ) -> Result<CreateEmailIdentityResponse, RusotoError<CreateEmailIdentityError>>;
3861
3862    /// <p>Delete an existing configuration set.</p> <p>In Amazon Pinpoint, <i>configuration sets</i> are groups of rules that you can apply to the emails you send. You apply a configuration set to an email by including a reference to the configuration set in the headers of the email. When you apply a configuration set to an email, all of the rules in that configuration set are applied to the email.</p>
3863    async fn delete_configuration_set(
3864        &self,
3865        input: DeleteConfigurationSetRequest,
3866    ) -> Result<DeleteConfigurationSetResponse, RusotoError<DeleteConfigurationSetError>>;
3867
3868    /// <p>Delete an event destination.</p> <p>In Amazon Pinpoint, <i>events</i> include message sends, deliveries, opens, clicks, bounces, and complaints. <i>Event destinations</i> are places that you can send information about these events to. For example, you can send event data to Amazon SNS to receive notifications when you receive bounces or complaints, or you can use Amazon Kinesis Data Firehose to stream data to Amazon S3 for long-term storage.</p>
3869    async fn delete_configuration_set_event_destination(
3870        &self,
3871        input: DeleteConfigurationSetEventDestinationRequest,
3872    ) -> Result<
3873        DeleteConfigurationSetEventDestinationResponse,
3874        RusotoError<DeleteConfigurationSetEventDestinationError>,
3875    >;
3876
3877    /// <p>Delete a dedicated IP pool.</p>
3878    async fn delete_dedicated_ip_pool(
3879        &self,
3880        input: DeleteDedicatedIpPoolRequest,
3881    ) -> Result<DeleteDedicatedIpPoolResponse, RusotoError<DeleteDedicatedIpPoolError>>;
3882
3883    /// <p>Deletes an email identity that you previously verified for use with Amazon Pinpoint. An identity can be either an email address or a domain name.</p>
3884    async fn delete_email_identity(
3885        &self,
3886        input: DeleteEmailIdentityRequest,
3887    ) -> Result<DeleteEmailIdentityResponse, RusotoError<DeleteEmailIdentityError>>;
3888
3889    /// <p>Obtain information about the email-sending status and capabilities of your Amazon Pinpoint account in the current AWS Region.</p>
3890    async fn get_account(&self) -> Result<GetAccountResponse, RusotoError<GetAccountError>>;
3891
3892    /// <p>Retrieve a list of the blacklists that your dedicated IP addresses appear on.</p>
3893    async fn get_blacklist_reports(
3894        &self,
3895        input: GetBlacklistReportsRequest,
3896    ) -> Result<GetBlacklistReportsResponse, RusotoError<GetBlacklistReportsError>>;
3897
3898    /// <p>Get information about an existing configuration set, including the dedicated IP pool that it's associated with, whether or not it's enabled for sending email, and more.</p> <p>In Amazon Pinpoint, <i>configuration sets</i> are groups of rules that you can apply to the emails you send. You apply a configuration set to an email by including a reference to the configuration set in the headers of the email. When you apply a configuration set to an email, all of the rules in that configuration set are applied to the email.</p>
3899    async fn get_configuration_set(
3900        &self,
3901        input: GetConfigurationSetRequest,
3902    ) -> Result<GetConfigurationSetResponse, RusotoError<GetConfigurationSetError>>;
3903
3904    /// <p>Retrieve a list of event destinations that are associated with a configuration set.</p> <p>In Amazon Pinpoint, <i>events</i> include message sends, deliveries, opens, clicks, bounces, and complaints. <i>Event destinations</i> are places that you can send information about these events to. For example, you can send event data to Amazon SNS to receive notifications when you receive bounces or complaints, or you can use Amazon Kinesis Data Firehose to stream data to Amazon S3 for long-term storage.</p>
3905    async fn get_configuration_set_event_destinations(
3906        &self,
3907        input: GetConfigurationSetEventDestinationsRequest,
3908    ) -> Result<
3909        GetConfigurationSetEventDestinationsResponse,
3910        RusotoError<GetConfigurationSetEventDestinationsError>,
3911    >;
3912
3913    /// <p>Get information about a dedicated IP address, including the name of the dedicated IP pool that it's associated with, as well information about the automatic warm-up process for the address.</p>
3914    async fn get_dedicated_ip(
3915        &self,
3916        input: GetDedicatedIpRequest,
3917    ) -> Result<GetDedicatedIpResponse, RusotoError<GetDedicatedIpError>>;
3918
3919    /// <p>List the dedicated IP addresses that are associated with your Amazon Pinpoint account.</p>
3920    async fn get_dedicated_ips(
3921        &self,
3922        input: GetDedicatedIpsRequest,
3923    ) -> Result<GetDedicatedIpsResponse, RusotoError<GetDedicatedIpsError>>;
3924
3925    /// <p>Retrieve information about the status of the Deliverability dashboard for your Amazon Pinpoint account. When the Deliverability dashboard is enabled, you gain access to reputation, deliverability, and other metrics for the domains that you use to send email using Amazon Pinpoint. You also gain the ability to perform predictive inbox placement tests.</p> <p>When you use the Deliverability dashboard, you pay a monthly subscription charge, in addition to any other fees that you accrue by using Amazon Pinpoint. For more information about the features and cost of a Deliverability dashboard subscription, see <a href="http://aws.amazon.com/pinpoint/pricing/">Amazon Pinpoint Pricing</a>.</p>
3926    async fn get_deliverability_dashboard_options(
3927        &self,
3928    ) -> Result<
3929        GetDeliverabilityDashboardOptionsResponse,
3930        RusotoError<GetDeliverabilityDashboardOptionsError>,
3931    >;
3932
3933    /// <p>Retrieve the results of a predictive inbox placement test.</p>
3934    async fn get_deliverability_test_report(
3935        &self,
3936        input: GetDeliverabilityTestReportRequest,
3937    ) -> Result<GetDeliverabilityTestReportResponse, RusotoError<GetDeliverabilityTestReportError>>;
3938
3939    /// <p>Retrieve all the deliverability data for a specific campaign. This data is available for a campaign only if the campaign sent email by using a domain that the Deliverability dashboard is enabled for (<code>PutDeliverabilityDashboardOption</code> operation).</p>
3940    async fn get_domain_deliverability_campaign(
3941        &self,
3942        input: GetDomainDeliverabilityCampaignRequest,
3943    ) -> Result<
3944        GetDomainDeliverabilityCampaignResponse,
3945        RusotoError<GetDomainDeliverabilityCampaignError>,
3946    >;
3947
3948    /// <p>Retrieve inbox placement and engagement rates for the domains that you use to send email.</p>
3949    async fn get_domain_statistics_report(
3950        &self,
3951        input: GetDomainStatisticsReportRequest,
3952    ) -> Result<GetDomainStatisticsReportResponse, RusotoError<GetDomainStatisticsReportError>>;
3953
3954    /// <p>Provides information about a specific identity associated with your Amazon Pinpoint account, including the identity's verification status, its DKIM authentication status, and its custom Mail-From settings.</p>
3955    async fn get_email_identity(
3956        &self,
3957        input: GetEmailIdentityRequest,
3958    ) -> Result<GetEmailIdentityResponse, RusotoError<GetEmailIdentityError>>;
3959
3960    /// <p>List all of the configuration sets associated with your Amazon Pinpoint account in the current region.</p> <p>In Amazon Pinpoint, <i>configuration sets</i> are groups of rules that you can apply to the emails you send. You apply a configuration set to an email by including a reference to the configuration set in the headers of the email. When you apply a configuration set to an email, all of the rules in that configuration set are applied to the email.</p>
3961    async fn list_configuration_sets(
3962        &self,
3963        input: ListConfigurationSetsRequest,
3964    ) -> Result<ListConfigurationSetsResponse, RusotoError<ListConfigurationSetsError>>;
3965
3966    /// <p>List all of the dedicated IP pools that exist in your Amazon Pinpoint account in the current AWS Region.</p>
3967    async fn list_dedicated_ip_pools(
3968        &self,
3969        input: ListDedicatedIpPoolsRequest,
3970    ) -> Result<ListDedicatedIpPoolsResponse, RusotoError<ListDedicatedIpPoolsError>>;
3971
3972    /// <p>Show a list of the predictive inbox placement tests that you've performed, regardless of their statuses. For predictive inbox placement tests that are complete, you can use the <code>GetDeliverabilityTestReport</code> operation to view the results.</p>
3973    async fn list_deliverability_test_reports(
3974        &self,
3975        input: ListDeliverabilityTestReportsRequest,
3976    ) -> Result<
3977        ListDeliverabilityTestReportsResponse,
3978        RusotoError<ListDeliverabilityTestReportsError>,
3979    >;
3980
3981    /// <p>Retrieve deliverability data for all the campaigns that used a specific domain to send email during a specified time range. This data is available for a domain only if you enabled the Deliverability dashboard (<code>PutDeliverabilityDashboardOption</code> operation) for the domain.</p>
3982    async fn list_domain_deliverability_campaigns(
3983        &self,
3984        input: ListDomainDeliverabilityCampaignsRequest,
3985    ) -> Result<
3986        ListDomainDeliverabilityCampaignsResponse,
3987        RusotoError<ListDomainDeliverabilityCampaignsError>,
3988    >;
3989
3990    /// <p>Returns a list of all of the email identities that are associated with your Amazon Pinpoint account. An identity can be either an email address or a domain. This operation returns identities that are verified as well as those that aren't.</p>
3991    async fn list_email_identities(
3992        &self,
3993        input: ListEmailIdentitiesRequest,
3994    ) -> Result<ListEmailIdentitiesResponse, RusotoError<ListEmailIdentitiesError>>;
3995
3996    /// <p>Retrieve a list of the tags (keys and values) that are associated with a specified resource. A <i>tag</i> is a label that you optionally define and associate with a resource in Amazon Pinpoint. Each tag consists of a required <i>tag key</i> and an optional associated <i>tag value</i>. A tag key is a general label that acts as a category for more specific tag values. A tag value acts as a descriptor within a tag key.</p>
3997    async fn list_tags_for_resource(
3998        &self,
3999        input: ListTagsForResourceRequest,
4000    ) -> Result<ListTagsForResourceResponse, RusotoError<ListTagsForResourceError>>;
4001
4002    /// <p>Enable or disable the automatic warm-up feature for dedicated IP addresses.</p>
4003    async fn put_account_dedicated_ip_warmup_attributes(
4004        &self,
4005        input: PutAccountDedicatedIpWarmupAttributesRequest,
4006    ) -> Result<
4007        PutAccountDedicatedIpWarmupAttributesResponse,
4008        RusotoError<PutAccountDedicatedIpWarmupAttributesError>,
4009    >;
4010
4011    /// <p>Enable or disable the ability of your account to send email.</p>
4012    async fn put_account_sending_attributes(
4013        &self,
4014        input: PutAccountSendingAttributesRequest,
4015    ) -> Result<PutAccountSendingAttributesResponse, RusotoError<PutAccountSendingAttributesError>>;
4016
4017    /// <p>Associate a configuration set with a dedicated IP pool. You can use dedicated IP pools to create groups of dedicated IP addresses for sending specific types of email.</p>
4018    async fn put_configuration_set_delivery_options(
4019        &self,
4020        input: PutConfigurationSetDeliveryOptionsRequest,
4021    ) -> Result<
4022        PutConfigurationSetDeliveryOptionsResponse,
4023        RusotoError<PutConfigurationSetDeliveryOptionsError>,
4024    >;
4025
4026    /// <p>Enable or disable collection of reputation metrics for emails that you send using a particular configuration set in a specific AWS Region.</p>
4027    async fn put_configuration_set_reputation_options(
4028        &self,
4029        input: PutConfigurationSetReputationOptionsRequest,
4030    ) -> Result<
4031        PutConfigurationSetReputationOptionsResponse,
4032        RusotoError<PutConfigurationSetReputationOptionsError>,
4033    >;
4034
4035    /// <p>Enable or disable email sending for messages that use a particular configuration set in a specific AWS Region.</p>
4036    async fn put_configuration_set_sending_options(
4037        &self,
4038        input: PutConfigurationSetSendingOptionsRequest,
4039    ) -> Result<
4040        PutConfigurationSetSendingOptionsResponse,
4041        RusotoError<PutConfigurationSetSendingOptionsError>,
4042    >;
4043
4044    /// <p>Specify a custom domain to use for open and click tracking elements in email that you send using Amazon Pinpoint.</p>
4045    async fn put_configuration_set_tracking_options(
4046        &self,
4047        input: PutConfigurationSetTrackingOptionsRequest,
4048    ) -> Result<
4049        PutConfigurationSetTrackingOptionsResponse,
4050        RusotoError<PutConfigurationSetTrackingOptionsError>,
4051    >;
4052
4053    /// <p><p>Move a dedicated IP address to an existing dedicated IP pool.</p> <note> <p>The dedicated IP address that you specify must already exist, and must be associated with your Amazon Pinpoint account. </p> <p>The dedicated IP pool you specify must already exist. You can create a new pool by using the <code>CreateDedicatedIpPool</code> operation.</p> </note></p>
4054    async fn put_dedicated_ip_in_pool(
4055        &self,
4056        input: PutDedicatedIpInPoolRequest,
4057    ) -> Result<PutDedicatedIpInPoolResponse, RusotoError<PutDedicatedIpInPoolError>>;
4058
4059    /// <p><p/></p>
4060    async fn put_dedicated_ip_warmup_attributes(
4061        &self,
4062        input: PutDedicatedIpWarmupAttributesRequest,
4063    ) -> Result<
4064        PutDedicatedIpWarmupAttributesResponse,
4065        RusotoError<PutDedicatedIpWarmupAttributesError>,
4066    >;
4067
4068    /// <p>Enable or disable the Deliverability dashboard for your Amazon Pinpoint account. When you enable the Deliverability dashboard, you gain access to reputation, deliverability, and other metrics for the domains that you use to send email using Amazon Pinpoint. You also gain the ability to perform predictive inbox placement tests.</p> <p>When you use the Deliverability dashboard, you pay a monthly subscription charge, in addition to any other fees that you accrue by using Amazon Pinpoint. For more information about the features and cost of a Deliverability dashboard subscription, see <a href="http://aws.amazon.com/pinpoint/pricing/">Amazon Pinpoint Pricing</a>.</p>
4069    async fn put_deliverability_dashboard_option(
4070        &self,
4071        input: PutDeliverabilityDashboardOptionRequest,
4072    ) -> Result<
4073        PutDeliverabilityDashboardOptionResponse,
4074        RusotoError<PutDeliverabilityDashboardOptionError>,
4075    >;
4076
4077    /// <p>Used to enable or disable DKIM authentication for an email identity.</p>
4078    async fn put_email_identity_dkim_attributes(
4079        &self,
4080        input: PutEmailIdentityDkimAttributesRequest,
4081    ) -> Result<
4082        PutEmailIdentityDkimAttributesResponse,
4083        RusotoError<PutEmailIdentityDkimAttributesError>,
4084    >;
4085
4086    /// <p>Used to enable or disable feedback forwarding for an identity. This setting determines what happens when an identity is used to send an email that results in a bounce or complaint event.</p> <p>When you enable feedback forwarding, Amazon Pinpoint sends you email notifications when bounce or complaint events occur. Amazon Pinpoint sends this notification to the address that you specified in the Return-Path header of the original email.</p> <p>When you disable feedback forwarding, Amazon Pinpoint sends notifications through other mechanisms, such as by notifying an Amazon SNS topic. You're required to have a method of tracking bounces and complaints. If you haven't set up another mechanism for receiving bounce or complaint notifications, Amazon Pinpoint sends an email notification when these events occur (even if this setting is disabled).</p>
4087    async fn put_email_identity_feedback_attributes(
4088        &self,
4089        input: PutEmailIdentityFeedbackAttributesRequest,
4090    ) -> Result<
4091        PutEmailIdentityFeedbackAttributesResponse,
4092        RusotoError<PutEmailIdentityFeedbackAttributesError>,
4093    >;
4094
4095    /// <p>Used to enable or disable the custom Mail-From domain configuration for an email identity.</p>
4096    async fn put_email_identity_mail_from_attributes(
4097        &self,
4098        input: PutEmailIdentityMailFromAttributesRequest,
4099    ) -> Result<
4100        PutEmailIdentityMailFromAttributesResponse,
4101        RusotoError<PutEmailIdentityMailFromAttributesError>,
4102    >;
4103
4104    /// <p><p>Sends an email message. You can use the Amazon Pinpoint Email API to send two types of messages:</p> <ul> <li> <p> <b>Simple</b> – A standard email message. When you create this type of message, you specify the sender, the recipient, and the message body, and Amazon Pinpoint assembles the message for you.</p> </li> <li> <p> <b>Raw</b> – A raw, MIME-formatted email message. When you send this type of email, you have to specify all of the message headers, as well as the message body. You can use this message type to send messages that contain attachments. The message that you specify has to be a valid MIME message.</p> </li> </ul></p>
4105    async fn send_email(
4106        &self,
4107        input: SendEmailRequest,
4108    ) -> Result<SendEmailResponse, RusotoError<SendEmailError>>;
4109
4110    /// <p>Add one or more tags (keys and values) to a specified resource. A <i>tag</i> is a label that you optionally define and associate with a resource in Amazon Pinpoint. Tags can help you categorize and manage resources in different ways, such as by purpose, owner, environment, or other criteria. A resource can have as many as 50 tags.</p> <p>Each tag consists of a required <i>tag key</i> and an associated <i>tag value</i>, both of which you define. A tag key is a general label that acts as a category for more specific tag values. A tag value acts as a descriptor within a tag key.</p>
4111    async fn tag_resource(
4112        &self,
4113        input: TagResourceRequest,
4114    ) -> Result<TagResourceResponse, RusotoError<TagResourceError>>;
4115
4116    /// <p>Remove one or more tags (keys and values) from a specified resource.</p>
4117    async fn untag_resource(
4118        &self,
4119        input: UntagResourceRequest,
4120    ) -> Result<UntagResourceResponse, RusotoError<UntagResourceError>>;
4121
4122    /// <p>Update the configuration of an event destination for a configuration set.</p> <p>In Amazon Pinpoint, <i>events</i> include message sends, deliveries, opens, clicks, bounces, and complaints. <i>Event destinations</i> are places that you can send information about these events to. For example, you can send event data to Amazon SNS to receive notifications when you receive bounces or complaints, or you can use Amazon Kinesis Data Firehose to stream data to Amazon S3 for long-term storage.</p>
4123    async fn update_configuration_set_event_destination(
4124        &self,
4125        input: UpdateConfigurationSetEventDestinationRequest,
4126    ) -> Result<
4127        UpdateConfigurationSetEventDestinationResponse,
4128        RusotoError<UpdateConfigurationSetEventDestinationError>,
4129    >;
4130}
4131/// A client for the Pinpoint Email API.
4132#[derive(Clone)]
4133pub struct PinpointEmailClient {
4134    client: Client,
4135    region: region::Region,
4136}
4137
4138impl PinpointEmailClient {
4139    /// Creates a client backed by the default tokio event loop.
4140    ///
4141    /// The client will use the default credentials provider and tls client.
4142    pub fn new(region: region::Region) -> PinpointEmailClient {
4143        PinpointEmailClient {
4144            client: Client::shared(),
4145            region,
4146        }
4147    }
4148
4149    pub fn new_with<P, D>(
4150        request_dispatcher: D,
4151        credentials_provider: P,
4152        region: region::Region,
4153    ) -> PinpointEmailClient
4154    where
4155        P: ProvideAwsCredentials + Send + Sync + 'static,
4156        D: DispatchSignedRequest + Send + Sync + 'static,
4157    {
4158        PinpointEmailClient {
4159            client: Client::new_with(credentials_provider, request_dispatcher),
4160            region,
4161        }
4162    }
4163
4164    pub fn new_with_client(client: Client, region: region::Region) -> PinpointEmailClient {
4165        PinpointEmailClient { client, region }
4166    }
4167}
4168
4169#[async_trait]
4170impl PinpointEmail for PinpointEmailClient {
4171    /// <p>Create a configuration set. <i>Configuration sets</i> are groups of rules that you can apply to the emails you send using Amazon Pinpoint. You apply a configuration set to an email by including a reference to the configuration set in the headers of the email. When you apply a configuration set to an email, all of the rules in that configuration set are applied to the email. </p>
4172    #[allow(unused_mut)]
4173    async fn create_configuration_set(
4174        &self,
4175        input: CreateConfigurationSetRequest,
4176    ) -> Result<CreateConfigurationSetResponse, RusotoError<CreateConfigurationSetError>> {
4177        let request_uri = "/v1/email/configuration-sets";
4178
4179        let mut request = SignedRequest::new("POST", "ses", &self.region, &request_uri);
4180        request.set_content_type("application/x-amz-json-1.1".to_owned());
4181
4182        request.set_endpoint_prefix("email".to_string());
4183        let encoded = Some(serde_json::to_vec(&input).unwrap());
4184        request.set_payload(encoded);
4185
4186        let mut response = self
4187            .client
4188            .sign_and_dispatch(request)
4189            .await
4190            .map_err(RusotoError::from)?;
4191        if response.status.is_success() {
4192            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4193            let result = proto::json::ResponsePayload::new(&response)
4194                .deserialize::<CreateConfigurationSetResponse, _>()?;
4195
4196            Ok(result)
4197        } else {
4198            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4199            Err(CreateConfigurationSetError::from_response(response))
4200        }
4201    }
4202
4203    /// <p>Create an event destination. In Amazon Pinpoint, <i>events</i> include message sends, deliveries, opens, clicks, bounces, and complaints. <i>Event destinations</i> are places that you can send information about these events to. For example, you can send event data to Amazon SNS to receive notifications when you receive bounces or complaints, or you can use Amazon Kinesis Data Firehose to stream data to Amazon S3 for long-term storage.</p> <p>A single configuration set can include more than one event destination.</p>
4204    #[allow(unused_mut)]
4205    async fn create_configuration_set_event_destination(
4206        &self,
4207        input: CreateConfigurationSetEventDestinationRequest,
4208    ) -> Result<
4209        CreateConfigurationSetEventDestinationResponse,
4210        RusotoError<CreateConfigurationSetEventDestinationError>,
4211    > {
4212        let request_uri = format!(
4213            "/v1/email/configuration-sets/{configuration_set_name}/event-destinations",
4214            configuration_set_name = input.configuration_set_name
4215        );
4216
4217        let mut request = SignedRequest::new("POST", "ses", &self.region, &request_uri);
4218        request.set_content_type("application/x-amz-json-1.1".to_owned());
4219
4220        request.set_endpoint_prefix("email".to_string());
4221        let encoded = Some(serde_json::to_vec(&input).unwrap());
4222        request.set_payload(encoded);
4223
4224        let mut response = self
4225            .client
4226            .sign_and_dispatch(request)
4227            .await
4228            .map_err(RusotoError::from)?;
4229        if response.status.is_success() {
4230            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4231            let result = proto::json::ResponsePayload::new(&response)
4232                .deserialize::<CreateConfigurationSetEventDestinationResponse, _>()?;
4233
4234            Ok(result)
4235        } else {
4236            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4237            Err(CreateConfigurationSetEventDestinationError::from_response(
4238                response,
4239            ))
4240        }
4241    }
4242
4243    /// <p>Create a new pool of dedicated IP addresses. A pool can include one or more dedicated IP addresses that are associated with your Amazon Pinpoint account. You can associate a pool with a configuration set. When you send an email that uses that configuration set, Amazon Pinpoint sends it using only the IP addresses in the associated pool.</p>
4244    #[allow(unused_mut)]
4245    async fn create_dedicated_ip_pool(
4246        &self,
4247        input: CreateDedicatedIpPoolRequest,
4248    ) -> Result<CreateDedicatedIpPoolResponse, RusotoError<CreateDedicatedIpPoolError>> {
4249        let request_uri = "/v1/email/dedicated-ip-pools";
4250
4251        let mut request = SignedRequest::new("POST", "ses", &self.region, &request_uri);
4252        request.set_content_type("application/x-amz-json-1.1".to_owned());
4253
4254        request.set_endpoint_prefix("email".to_string());
4255        let encoded = Some(serde_json::to_vec(&input).unwrap());
4256        request.set_payload(encoded);
4257
4258        let mut response = self
4259            .client
4260            .sign_and_dispatch(request)
4261            .await
4262            .map_err(RusotoError::from)?;
4263        if response.status.is_success() {
4264            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4265            let result = proto::json::ResponsePayload::new(&response)
4266                .deserialize::<CreateDedicatedIpPoolResponse, _>()?;
4267
4268            Ok(result)
4269        } else {
4270            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4271            Err(CreateDedicatedIpPoolError::from_response(response))
4272        }
4273    }
4274
4275    /// <p>Create a new predictive inbox placement test. Predictive inbox placement tests can help you predict how your messages will be handled by various email providers around the world. When you perform a predictive inbox placement test, you provide a sample message that contains the content that you plan to send to your customers. Amazon Pinpoint then sends that message to special email addresses spread across several major email providers. After about 24 hours, the test is complete, and you can use the <code>GetDeliverabilityTestReport</code> operation to view the results of the test.</p>
4276    #[allow(unused_mut)]
4277    async fn create_deliverability_test_report(
4278        &self,
4279        input: CreateDeliverabilityTestReportRequest,
4280    ) -> Result<
4281        CreateDeliverabilityTestReportResponse,
4282        RusotoError<CreateDeliverabilityTestReportError>,
4283    > {
4284        let request_uri = "/v1/email/deliverability-dashboard/test";
4285
4286        let mut request = SignedRequest::new("POST", "ses", &self.region, &request_uri);
4287        request.set_content_type("application/x-amz-json-1.1".to_owned());
4288
4289        request.set_endpoint_prefix("email".to_string());
4290        let encoded = Some(serde_json::to_vec(&input).unwrap());
4291        request.set_payload(encoded);
4292
4293        let mut response = self
4294            .client
4295            .sign_and_dispatch(request)
4296            .await
4297            .map_err(RusotoError::from)?;
4298        if response.status.is_success() {
4299            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4300            let result = proto::json::ResponsePayload::new(&response)
4301                .deserialize::<CreateDeliverabilityTestReportResponse, _>()?;
4302
4303            Ok(result)
4304        } else {
4305            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4306            Err(CreateDeliverabilityTestReportError::from_response(response))
4307        }
4308    }
4309
4310    /// <p>Verifies an email identity for use with Amazon Pinpoint. In Amazon Pinpoint, an identity is an email address or domain that you use when you send email. Before you can use an identity to send email with Amazon Pinpoint, you first have to verify it. By verifying an address, you demonstrate that you're the owner of the address, and that you've given Amazon Pinpoint permission to send email from the address.</p> <p>When you verify an email address, Amazon Pinpoint sends an email to the address. Your email address is verified as soon as you follow the link in the verification email. </p> <p>When you verify a domain, this operation provides a set of DKIM tokens, which you can convert into CNAME tokens. You add these CNAME tokens to the DNS configuration for your domain. Your domain is verified when Amazon Pinpoint detects these records in the DNS configuration for your domain. It usually takes around 72 hours to complete the domain verification process.</p>
4311    #[allow(unused_mut)]
4312    async fn create_email_identity(
4313        &self,
4314        input: CreateEmailIdentityRequest,
4315    ) -> Result<CreateEmailIdentityResponse, RusotoError<CreateEmailIdentityError>> {
4316        let request_uri = "/v1/email/identities";
4317
4318        let mut request = SignedRequest::new("POST", "ses", &self.region, &request_uri);
4319        request.set_content_type("application/x-amz-json-1.1".to_owned());
4320
4321        request.set_endpoint_prefix("email".to_string());
4322        let encoded = Some(serde_json::to_vec(&input).unwrap());
4323        request.set_payload(encoded);
4324
4325        let mut response = self
4326            .client
4327            .sign_and_dispatch(request)
4328            .await
4329            .map_err(RusotoError::from)?;
4330        if response.status.is_success() {
4331            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4332            let result = proto::json::ResponsePayload::new(&response)
4333                .deserialize::<CreateEmailIdentityResponse, _>()?;
4334
4335            Ok(result)
4336        } else {
4337            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4338            Err(CreateEmailIdentityError::from_response(response))
4339        }
4340    }
4341
4342    /// <p>Delete an existing configuration set.</p> <p>In Amazon Pinpoint, <i>configuration sets</i> are groups of rules that you can apply to the emails you send. You apply a configuration set to an email by including a reference to the configuration set in the headers of the email. When you apply a configuration set to an email, all of the rules in that configuration set are applied to the email.</p>
4343    #[allow(unused_mut)]
4344    async fn delete_configuration_set(
4345        &self,
4346        input: DeleteConfigurationSetRequest,
4347    ) -> Result<DeleteConfigurationSetResponse, RusotoError<DeleteConfigurationSetError>> {
4348        let request_uri = format!(
4349            "/v1/email/configuration-sets/{configuration_set_name}",
4350            configuration_set_name = input.configuration_set_name
4351        );
4352
4353        let mut request = SignedRequest::new("DELETE", "ses", &self.region, &request_uri);
4354        request.set_content_type("application/x-amz-json-1.1".to_owned());
4355
4356        request.set_endpoint_prefix("email".to_string());
4357
4358        let mut response = self
4359            .client
4360            .sign_and_dispatch(request)
4361            .await
4362            .map_err(RusotoError::from)?;
4363        if response.status.is_success() {
4364            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4365            let result = proto::json::ResponsePayload::new(&response)
4366                .deserialize::<DeleteConfigurationSetResponse, _>()?;
4367
4368            Ok(result)
4369        } else {
4370            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4371            Err(DeleteConfigurationSetError::from_response(response))
4372        }
4373    }
4374
4375    /// <p>Delete an event destination.</p> <p>In Amazon Pinpoint, <i>events</i> include message sends, deliveries, opens, clicks, bounces, and complaints. <i>Event destinations</i> are places that you can send information about these events to. For example, you can send event data to Amazon SNS to receive notifications when you receive bounces or complaints, or you can use Amazon Kinesis Data Firehose to stream data to Amazon S3 for long-term storage.</p>
4376    #[allow(unused_mut)]
4377    async fn delete_configuration_set_event_destination(
4378        &self,
4379        input: DeleteConfigurationSetEventDestinationRequest,
4380    ) -> Result<
4381        DeleteConfigurationSetEventDestinationResponse,
4382        RusotoError<DeleteConfigurationSetEventDestinationError>,
4383    > {
4384        let request_uri = format!("/v1/email/configuration-sets/{configuration_set_name}/event-destinations/{event_destination_name}", configuration_set_name = input.configuration_set_name, event_destination_name = input.event_destination_name);
4385
4386        let mut request = SignedRequest::new("DELETE", "ses", &self.region, &request_uri);
4387        request.set_content_type("application/x-amz-json-1.1".to_owned());
4388
4389        request.set_endpoint_prefix("email".to_string());
4390
4391        let mut response = self
4392            .client
4393            .sign_and_dispatch(request)
4394            .await
4395            .map_err(RusotoError::from)?;
4396        if response.status.is_success() {
4397            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4398            let result = proto::json::ResponsePayload::new(&response)
4399                .deserialize::<DeleteConfigurationSetEventDestinationResponse, _>()?;
4400
4401            Ok(result)
4402        } else {
4403            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4404            Err(DeleteConfigurationSetEventDestinationError::from_response(
4405                response,
4406            ))
4407        }
4408    }
4409
4410    /// <p>Delete a dedicated IP pool.</p>
4411    #[allow(unused_mut)]
4412    async fn delete_dedicated_ip_pool(
4413        &self,
4414        input: DeleteDedicatedIpPoolRequest,
4415    ) -> Result<DeleteDedicatedIpPoolResponse, RusotoError<DeleteDedicatedIpPoolError>> {
4416        let request_uri = format!(
4417            "/v1/email/dedicated-ip-pools/{pool_name}",
4418            pool_name = input.pool_name
4419        );
4420
4421        let mut request = SignedRequest::new("DELETE", "ses", &self.region, &request_uri);
4422        request.set_content_type("application/x-amz-json-1.1".to_owned());
4423
4424        request.set_endpoint_prefix("email".to_string());
4425
4426        let mut response = self
4427            .client
4428            .sign_and_dispatch(request)
4429            .await
4430            .map_err(RusotoError::from)?;
4431        if response.status.is_success() {
4432            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4433            let result = proto::json::ResponsePayload::new(&response)
4434                .deserialize::<DeleteDedicatedIpPoolResponse, _>()?;
4435
4436            Ok(result)
4437        } else {
4438            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4439            Err(DeleteDedicatedIpPoolError::from_response(response))
4440        }
4441    }
4442
4443    /// <p>Deletes an email identity that you previously verified for use with Amazon Pinpoint. An identity can be either an email address or a domain name.</p>
4444    #[allow(unused_mut)]
4445    async fn delete_email_identity(
4446        &self,
4447        input: DeleteEmailIdentityRequest,
4448    ) -> Result<DeleteEmailIdentityResponse, RusotoError<DeleteEmailIdentityError>> {
4449        let request_uri = format!(
4450            "/v1/email/identities/{email_identity}",
4451            email_identity = input.email_identity
4452        );
4453
4454        let mut request = SignedRequest::new("DELETE", "ses", &self.region, &request_uri);
4455        request.set_content_type("application/x-amz-json-1.1".to_owned());
4456
4457        request.set_endpoint_prefix("email".to_string());
4458
4459        let mut response = self
4460            .client
4461            .sign_and_dispatch(request)
4462            .await
4463            .map_err(RusotoError::from)?;
4464        if response.status.is_success() {
4465            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4466            let result = proto::json::ResponsePayload::new(&response)
4467                .deserialize::<DeleteEmailIdentityResponse, _>()?;
4468
4469            Ok(result)
4470        } else {
4471            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4472            Err(DeleteEmailIdentityError::from_response(response))
4473        }
4474    }
4475
4476    /// <p>Obtain information about the email-sending status and capabilities of your Amazon Pinpoint account in the current AWS Region.</p>
4477    #[allow(unused_mut)]
4478    async fn get_account(&self) -> Result<GetAccountResponse, RusotoError<GetAccountError>> {
4479        let request_uri = "/v1/email/account";
4480
4481        let mut request = SignedRequest::new("GET", "ses", &self.region, &request_uri);
4482        request.set_content_type("application/x-amz-json-1.1".to_owned());
4483
4484        request.set_endpoint_prefix("email".to_string());
4485
4486        let mut response = self
4487            .client
4488            .sign_and_dispatch(request)
4489            .await
4490            .map_err(RusotoError::from)?;
4491        if response.status.is_success() {
4492            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4493            let result = proto::json::ResponsePayload::new(&response)
4494                .deserialize::<GetAccountResponse, _>()?;
4495
4496            Ok(result)
4497        } else {
4498            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4499            Err(GetAccountError::from_response(response))
4500        }
4501    }
4502
4503    /// <p>Retrieve a list of the blacklists that your dedicated IP addresses appear on.</p>
4504    #[allow(unused_mut)]
4505    async fn get_blacklist_reports(
4506        &self,
4507        input: GetBlacklistReportsRequest,
4508    ) -> Result<GetBlacklistReportsResponse, RusotoError<GetBlacklistReportsError>> {
4509        let request_uri = "/v1/email/deliverability-dashboard/blacklist-report";
4510
4511        let mut request = SignedRequest::new("GET", "ses", &self.region, &request_uri);
4512        request.set_content_type("application/x-amz-json-1.1".to_owned());
4513
4514        request.set_endpoint_prefix("email".to_string());
4515
4516        let mut params = Params::new();
4517        for item in input.blacklist_item_names.iter() {
4518            params.put("BlacklistItemNames", item);
4519        }
4520        request.set_params(params);
4521
4522        let mut response = self
4523            .client
4524            .sign_and_dispatch(request)
4525            .await
4526            .map_err(RusotoError::from)?;
4527        if response.status.is_success() {
4528            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4529            let result = proto::json::ResponsePayload::new(&response)
4530                .deserialize::<GetBlacklistReportsResponse, _>()?;
4531
4532            Ok(result)
4533        } else {
4534            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4535            Err(GetBlacklistReportsError::from_response(response))
4536        }
4537    }
4538
4539    /// <p>Get information about an existing configuration set, including the dedicated IP pool that it's associated with, whether or not it's enabled for sending email, and more.</p> <p>In Amazon Pinpoint, <i>configuration sets</i> are groups of rules that you can apply to the emails you send. You apply a configuration set to an email by including a reference to the configuration set in the headers of the email. When you apply a configuration set to an email, all of the rules in that configuration set are applied to the email.</p>
4540    #[allow(unused_mut)]
4541    async fn get_configuration_set(
4542        &self,
4543        input: GetConfigurationSetRequest,
4544    ) -> Result<GetConfigurationSetResponse, RusotoError<GetConfigurationSetError>> {
4545        let request_uri = format!(
4546            "/v1/email/configuration-sets/{configuration_set_name}",
4547            configuration_set_name = input.configuration_set_name
4548        );
4549
4550        let mut request = SignedRequest::new("GET", "ses", &self.region, &request_uri);
4551        request.set_content_type("application/x-amz-json-1.1".to_owned());
4552
4553        request.set_endpoint_prefix("email".to_string());
4554
4555        let mut response = self
4556            .client
4557            .sign_and_dispatch(request)
4558            .await
4559            .map_err(RusotoError::from)?;
4560        if response.status.is_success() {
4561            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4562            let result = proto::json::ResponsePayload::new(&response)
4563                .deserialize::<GetConfigurationSetResponse, _>()?;
4564
4565            Ok(result)
4566        } else {
4567            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4568            Err(GetConfigurationSetError::from_response(response))
4569        }
4570    }
4571
4572    /// <p>Retrieve a list of event destinations that are associated with a configuration set.</p> <p>In Amazon Pinpoint, <i>events</i> include message sends, deliveries, opens, clicks, bounces, and complaints. <i>Event destinations</i> are places that you can send information about these events to. For example, you can send event data to Amazon SNS to receive notifications when you receive bounces or complaints, or you can use Amazon Kinesis Data Firehose to stream data to Amazon S3 for long-term storage.</p>
4573    #[allow(unused_mut)]
4574    async fn get_configuration_set_event_destinations(
4575        &self,
4576        input: GetConfigurationSetEventDestinationsRequest,
4577    ) -> Result<
4578        GetConfigurationSetEventDestinationsResponse,
4579        RusotoError<GetConfigurationSetEventDestinationsError>,
4580    > {
4581        let request_uri = format!(
4582            "/v1/email/configuration-sets/{configuration_set_name}/event-destinations",
4583            configuration_set_name = input.configuration_set_name
4584        );
4585
4586        let mut request = SignedRequest::new("GET", "ses", &self.region, &request_uri);
4587        request.set_content_type("application/x-amz-json-1.1".to_owned());
4588
4589        request.set_endpoint_prefix("email".to_string());
4590
4591        let mut response = self
4592            .client
4593            .sign_and_dispatch(request)
4594            .await
4595            .map_err(RusotoError::from)?;
4596        if response.status.is_success() {
4597            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4598            let result = proto::json::ResponsePayload::new(&response)
4599                .deserialize::<GetConfigurationSetEventDestinationsResponse, _>()?;
4600
4601            Ok(result)
4602        } else {
4603            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4604            Err(GetConfigurationSetEventDestinationsError::from_response(
4605                response,
4606            ))
4607        }
4608    }
4609
4610    /// <p>Get information about a dedicated IP address, including the name of the dedicated IP pool that it's associated with, as well information about the automatic warm-up process for the address.</p>
4611    #[allow(unused_mut)]
4612    async fn get_dedicated_ip(
4613        &self,
4614        input: GetDedicatedIpRequest,
4615    ) -> Result<GetDedicatedIpResponse, RusotoError<GetDedicatedIpError>> {
4616        let request_uri = format!("/v1/email/dedicated-ips/{ip}", ip = input.ip);
4617
4618        let mut request = SignedRequest::new("GET", "ses", &self.region, &request_uri);
4619        request.set_content_type("application/x-amz-json-1.1".to_owned());
4620
4621        request.set_endpoint_prefix("email".to_string());
4622
4623        let mut response = self
4624            .client
4625            .sign_and_dispatch(request)
4626            .await
4627            .map_err(RusotoError::from)?;
4628        if response.status.is_success() {
4629            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4630            let result = proto::json::ResponsePayload::new(&response)
4631                .deserialize::<GetDedicatedIpResponse, _>()?;
4632
4633            Ok(result)
4634        } else {
4635            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4636            Err(GetDedicatedIpError::from_response(response))
4637        }
4638    }
4639
4640    /// <p>List the dedicated IP addresses that are associated with your Amazon Pinpoint account.</p>
4641    #[allow(unused_mut)]
4642    async fn get_dedicated_ips(
4643        &self,
4644        input: GetDedicatedIpsRequest,
4645    ) -> Result<GetDedicatedIpsResponse, RusotoError<GetDedicatedIpsError>> {
4646        let request_uri = "/v1/email/dedicated-ips";
4647
4648        let mut request = SignedRequest::new("GET", "ses", &self.region, &request_uri);
4649        request.set_content_type("application/x-amz-json-1.1".to_owned());
4650
4651        request.set_endpoint_prefix("email".to_string());
4652
4653        let mut params = Params::new();
4654        if let Some(ref x) = input.next_token {
4655            params.put("NextToken", x);
4656        }
4657        if let Some(ref x) = input.page_size {
4658            params.put("PageSize", x);
4659        }
4660        if let Some(ref x) = input.pool_name {
4661            params.put("PoolName", x);
4662        }
4663        request.set_params(params);
4664
4665        let mut response = self
4666            .client
4667            .sign_and_dispatch(request)
4668            .await
4669            .map_err(RusotoError::from)?;
4670        if response.status.is_success() {
4671            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4672            let result = proto::json::ResponsePayload::new(&response)
4673                .deserialize::<GetDedicatedIpsResponse, _>()?;
4674
4675            Ok(result)
4676        } else {
4677            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4678            Err(GetDedicatedIpsError::from_response(response))
4679        }
4680    }
4681
4682    /// <p>Retrieve information about the status of the Deliverability dashboard for your Amazon Pinpoint account. When the Deliverability dashboard is enabled, you gain access to reputation, deliverability, and other metrics for the domains that you use to send email using Amazon Pinpoint. You also gain the ability to perform predictive inbox placement tests.</p> <p>When you use the Deliverability dashboard, you pay a monthly subscription charge, in addition to any other fees that you accrue by using Amazon Pinpoint. For more information about the features and cost of a Deliverability dashboard subscription, see <a href="http://aws.amazon.com/pinpoint/pricing/">Amazon Pinpoint Pricing</a>.</p>
4683    #[allow(unused_mut)]
4684    async fn get_deliverability_dashboard_options(
4685        &self,
4686    ) -> Result<
4687        GetDeliverabilityDashboardOptionsResponse,
4688        RusotoError<GetDeliverabilityDashboardOptionsError>,
4689    > {
4690        let request_uri = "/v1/email/deliverability-dashboard";
4691
4692        let mut request = SignedRequest::new("GET", "ses", &self.region, &request_uri);
4693        request.set_content_type("application/x-amz-json-1.1".to_owned());
4694
4695        request.set_endpoint_prefix("email".to_string());
4696
4697        let mut response = self
4698            .client
4699            .sign_and_dispatch(request)
4700            .await
4701            .map_err(RusotoError::from)?;
4702        if response.status.is_success() {
4703            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4704            let result = proto::json::ResponsePayload::new(&response)
4705                .deserialize::<GetDeliverabilityDashboardOptionsResponse, _>()?;
4706
4707            Ok(result)
4708        } else {
4709            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4710            Err(GetDeliverabilityDashboardOptionsError::from_response(
4711                response,
4712            ))
4713        }
4714    }
4715
4716    /// <p>Retrieve the results of a predictive inbox placement test.</p>
4717    #[allow(unused_mut)]
4718    async fn get_deliverability_test_report(
4719        &self,
4720        input: GetDeliverabilityTestReportRequest,
4721    ) -> Result<GetDeliverabilityTestReportResponse, RusotoError<GetDeliverabilityTestReportError>>
4722    {
4723        let request_uri = format!(
4724            "/v1/email/deliverability-dashboard/test-reports/{report_id}",
4725            report_id = input.report_id
4726        );
4727
4728        let mut request = SignedRequest::new("GET", "ses", &self.region, &request_uri);
4729        request.set_content_type("application/x-amz-json-1.1".to_owned());
4730
4731        request.set_endpoint_prefix("email".to_string());
4732
4733        let mut response = self
4734            .client
4735            .sign_and_dispatch(request)
4736            .await
4737            .map_err(RusotoError::from)?;
4738        if response.status.is_success() {
4739            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4740            let result = proto::json::ResponsePayload::new(&response)
4741                .deserialize::<GetDeliverabilityTestReportResponse, _>()?;
4742
4743            Ok(result)
4744        } else {
4745            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4746            Err(GetDeliverabilityTestReportError::from_response(response))
4747        }
4748    }
4749
4750    /// <p>Retrieve all the deliverability data for a specific campaign. This data is available for a campaign only if the campaign sent email by using a domain that the Deliverability dashboard is enabled for (<code>PutDeliverabilityDashboardOption</code> operation).</p>
4751    #[allow(unused_mut)]
4752    async fn get_domain_deliverability_campaign(
4753        &self,
4754        input: GetDomainDeliverabilityCampaignRequest,
4755    ) -> Result<
4756        GetDomainDeliverabilityCampaignResponse,
4757        RusotoError<GetDomainDeliverabilityCampaignError>,
4758    > {
4759        let request_uri = format!(
4760            "/v1/email/deliverability-dashboard/campaigns/{campaign_id}",
4761            campaign_id = input.campaign_id
4762        );
4763
4764        let mut request = SignedRequest::new("GET", "ses", &self.region, &request_uri);
4765        request.set_content_type("application/x-amz-json-1.1".to_owned());
4766
4767        request.set_endpoint_prefix("email".to_string());
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::<GetDomainDeliverabilityCampaignResponse, _>()?;
4778
4779            Ok(result)
4780        } else {
4781            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4782            Err(GetDomainDeliverabilityCampaignError::from_response(
4783                response,
4784            ))
4785        }
4786    }
4787
4788    /// <p>Retrieve inbox placement and engagement rates for the domains that you use to send email.</p>
4789    #[allow(unused_mut)]
4790    async fn get_domain_statistics_report(
4791        &self,
4792        input: GetDomainStatisticsReportRequest,
4793    ) -> Result<GetDomainStatisticsReportResponse, RusotoError<GetDomainStatisticsReportError>>
4794    {
4795        let request_uri = format!(
4796            "/v1/email/deliverability-dashboard/statistics-report/{domain}",
4797            domain = input.domain
4798        );
4799
4800        let mut request = SignedRequest::new("GET", "ses", &self.region, &request_uri);
4801        request.set_content_type("application/x-amz-json-1.1".to_owned());
4802
4803        request.set_endpoint_prefix("email".to_string());
4804
4805        let mut params = Params::new();
4806        params.put("EndDate", &input.end_date);
4807        params.put("StartDate", &input.start_date);
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::<GetDomainStatisticsReportResponse, _>()?;
4819
4820            Ok(result)
4821        } else {
4822            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4823            Err(GetDomainStatisticsReportError::from_response(response))
4824        }
4825    }
4826
4827    /// <p>Provides information about a specific identity associated with your Amazon Pinpoint account, including the identity's verification status, its DKIM authentication status, and its custom Mail-From settings.</p>
4828    #[allow(unused_mut)]
4829    async fn get_email_identity(
4830        &self,
4831        input: GetEmailIdentityRequest,
4832    ) -> Result<GetEmailIdentityResponse, RusotoError<GetEmailIdentityError>> {
4833        let request_uri = format!(
4834            "/v1/email/identities/{email_identity}",
4835            email_identity = input.email_identity
4836        );
4837
4838        let mut request = SignedRequest::new("GET", "ses", &self.region, &request_uri);
4839        request.set_content_type("application/x-amz-json-1.1".to_owned());
4840
4841        request.set_endpoint_prefix("email".to_string());
4842
4843        let mut response = self
4844            .client
4845            .sign_and_dispatch(request)
4846            .await
4847            .map_err(RusotoError::from)?;
4848        if response.status.is_success() {
4849            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4850            let result = proto::json::ResponsePayload::new(&response)
4851                .deserialize::<GetEmailIdentityResponse, _>()?;
4852
4853            Ok(result)
4854        } else {
4855            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4856            Err(GetEmailIdentityError::from_response(response))
4857        }
4858    }
4859
4860    /// <p>List all of the configuration sets associated with your Amazon Pinpoint account in the current region.</p> <p>In Amazon Pinpoint, <i>configuration sets</i> are groups of rules that you can apply to the emails you send. You apply a configuration set to an email by including a reference to the configuration set in the headers of the email. When you apply a configuration set to an email, all of the rules in that configuration set are applied to the email.</p>
4861    #[allow(unused_mut)]
4862    async fn list_configuration_sets(
4863        &self,
4864        input: ListConfigurationSetsRequest,
4865    ) -> Result<ListConfigurationSetsResponse, RusotoError<ListConfigurationSetsError>> {
4866        let request_uri = "/v1/email/configuration-sets";
4867
4868        let mut request = SignedRequest::new("GET", "ses", &self.region, &request_uri);
4869        request.set_content_type("application/x-amz-json-1.1".to_owned());
4870
4871        request.set_endpoint_prefix("email".to_string());
4872
4873        let mut params = Params::new();
4874        if let Some(ref x) = input.next_token {
4875            params.put("NextToken", x);
4876        }
4877        if let Some(ref x) = input.page_size {
4878            params.put("PageSize", x);
4879        }
4880        request.set_params(params);
4881
4882        let mut response = self
4883            .client
4884            .sign_and_dispatch(request)
4885            .await
4886            .map_err(RusotoError::from)?;
4887        if response.status.is_success() {
4888            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4889            let result = proto::json::ResponsePayload::new(&response)
4890                .deserialize::<ListConfigurationSetsResponse, _>()?;
4891
4892            Ok(result)
4893        } else {
4894            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4895            Err(ListConfigurationSetsError::from_response(response))
4896        }
4897    }
4898
4899    /// <p>List all of the dedicated IP pools that exist in your Amazon Pinpoint account in the current AWS Region.</p>
4900    #[allow(unused_mut)]
4901    async fn list_dedicated_ip_pools(
4902        &self,
4903        input: ListDedicatedIpPoolsRequest,
4904    ) -> Result<ListDedicatedIpPoolsResponse, RusotoError<ListDedicatedIpPoolsError>> {
4905        let request_uri = "/v1/email/dedicated-ip-pools";
4906
4907        let mut request = SignedRequest::new("GET", "ses", &self.region, &request_uri);
4908        request.set_content_type("application/x-amz-json-1.1".to_owned());
4909
4910        request.set_endpoint_prefix("email".to_string());
4911
4912        let mut params = Params::new();
4913        if let Some(ref x) = input.next_token {
4914            params.put("NextToken", x);
4915        }
4916        if let Some(ref x) = input.page_size {
4917            params.put("PageSize", x);
4918        }
4919        request.set_params(params);
4920
4921        let mut response = self
4922            .client
4923            .sign_and_dispatch(request)
4924            .await
4925            .map_err(RusotoError::from)?;
4926        if response.status.is_success() {
4927            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4928            let result = proto::json::ResponsePayload::new(&response)
4929                .deserialize::<ListDedicatedIpPoolsResponse, _>()?;
4930
4931            Ok(result)
4932        } else {
4933            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4934            Err(ListDedicatedIpPoolsError::from_response(response))
4935        }
4936    }
4937
4938    /// <p>Show a list of the predictive inbox placement tests that you've performed, regardless of their statuses. For predictive inbox placement tests that are complete, you can use the <code>GetDeliverabilityTestReport</code> operation to view the results.</p>
4939    #[allow(unused_mut)]
4940    async fn list_deliverability_test_reports(
4941        &self,
4942        input: ListDeliverabilityTestReportsRequest,
4943    ) -> Result<
4944        ListDeliverabilityTestReportsResponse,
4945        RusotoError<ListDeliverabilityTestReportsError>,
4946    > {
4947        let request_uri = "/v1/email/deliverability-dashboard/test-reports";
4948
4949        let mut request = SignedRequest::new("GET", "ses", &self.region, &request_uri);
4950        request.set_content_type("application/x-amz-json-1.1".to_owned());
4951
4952        request.set_endpoint_prefix("email".to_string());
4953
4954        let mut params = Params::new();
4955        if let Some(ref x) = input.next_token {
4956            params.put("NextToken", x);
4957        }
4958        if let Some(ref x) = input.page_size {
4959            params.put("PageSize", x);
4960        }
4961        request.set_params(params);
4962
4963        let mut response = self
4964            .client
4965            .sign_and_dispatch(request)
4966            .await
4967            .map_err(RusotoError::from)?;
4968        if response.status.is_success() {
4969            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4970            let result = proto::json::ResponsePayload::new(&response)
4971                .deserialize::<ListDeliverabilityTestReportsResponse, _>()?;
4972
4973            Ok(result)
4974        } else {
4975            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4976            Err(ListDeliverabilityTestReportsError::from_response(response))
4977        }
4978    }
4979
4980    /// <p>Retrieve deliverability data for all the campaigns that used a specific domain to send email during a specified time range. This data is available for a domain only if you enabled the Deliverability dashboard (<code>PutDeliverabilityDashboardOption</code> operation) for the domain.</p>
4981    #[allow(unused_mut)]
4982    async fn list_domain_deliverability_campaigns(
4983        &self,
4984        input: ListDomainDeliverabilityCampaignsRequest,
4985    ) -> Result<
4986        ListDomainDeliverabilityCampaignsResponse,
4987        RusotoError<ListDomainDeliverabilityCampaignsError>,
4988    > {
4989        let request_uri = format!(
4990            "/v1/email/deliverability-dashboard/domains/{subscribed_domain}/campaigns",
4991            subscribed_domain = input.subscribed_domain
4992        );
4993
4994        let mut request = SignedRequest::new("GET", "ses", &self.region, &request_uri);
4995        request.set_content_type("application/x-amz-json-1.1".to_owned());
4996
4997        request.set_endpoint_prefix("email".to_string());
4998
4999        let mut params = Params::new();
5000        params.put("EndDate", &input.end_date);
5001        if let Some(ref x) = input.next_token {
5002            params.put("NextToken", x);
5003        }
5004        if let Some(ref x) = input.page_size {
5005            params.put("PageSize", x);
5006        }
5007        params.put("StartDate", &input.start_date);
5008        request.set_params(params);
5009
5010        let mut response = self
5011            .client
5012            .sign_and_dispatch(request)
5013            .await
5014            .map_err(RusotoError::from)?;
5015        if response.status.is_success() {
5016            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5017            let result = proto::json::ResponsePayload::new(&response)
5018                .deserialize::<ListDomainDeliverabilityCampaignsResponse, _>()?;
5019
5020            Ok(result)
5021        } else {
5022            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5023            Err(ListDomainDeliverabilityCampaignsError::from_response(
5024                response,
5025            ))
5026        }
5027    }
5028
5029    /// <p>Returns a list of all of the email identities that are associated with your Amazon Pinpoint account. An identity can be either an email address or a domain. This operation returns identities that are verified as well as those that aren't.</p>
5030    #[allow(unused_mut)]
5031    async fn list_email_identities(
5032        &self,
5033        input: ListEmailIdentitiesRequest,
5034    ) -> Result<ListEmailIdentitiesResponse, RusotoError<ListEmailIdentitiesError>> {
5035        let request_uri = "/v1/email/identities";
5036
5037        let mut request = SignedRequest::new("GET", "ses", &self.region, &request_uri);
5038        request.set_content_type("application/x-amz-json-1.1".to_owned());
5039
5040        request.set_endpoint_prefix("email".to_string());
5041
5042        let mut params = Params::new();
5043        if let Some(ref x) = input.next_token {
5044            params.put("NextToken", x);
5045        }
5046        if let Some(ref x) = input.page_size {
5047            params.put("PageSize", x);
5048        }
5049        request.set_params(params);
5050
5051        let mut response = self
5052            .client
5053            .sign_and_dispatch(request)
5054            .await
5055            .map_err(RusotoError::from)?;
5056        if response.status.is_success() {
5057            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5058            let result = proto::json::ResponsePayload::new(&response)
5059                .deserialize::<ListEmailIdentitiesResponse, _>()?;
5060
5061            Ok(result)
5062        } else {
5063            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5064            Err(ListEmailIdentitiesError::from_response(response))
5065        }
5066    }
5067
5068    /// <p>Retrieve a list of the tags (keys and values) that are associated with a specified resource. A <i>tag</i> is a label that you optionally define and associate with a resource in Amazon Pinpoint. Each tag consists of a required <i>tag key</i> and an optional associated <i>tag value</i>. A tag key is a general label that acts as a category for more specific tag values. A tag value acts as a descriptor within a tag key.</p>
5069    #[allow(unused_mut)]
5070    async fn list_tags_for_resource(
5071        &self,
5072        input: ListTagsForResourceRequest,
5073    ) -> Result<ListTagsForResourceResponse, RusotoError<ListTagsForResourceError>> {
5074        let request_uri = "/v1/email/tags";
5075
5076        let mut request = SignedRequest::new("GET", "ses", &self.region, &request_uri);
5077        request.set_content_type("application/x-amz-json-1.1".to_owned());
5078
5079        request.set_endpoint_prefix("email".to_string());
5080
5081        let mut params = Params::new();
5082        params.put("ResourceArn", &input.resource_arn);
5083        request.set_params(params);
5084
5085        let mut response = self
5086            .client
5087            .sign_and_dispatch(request)
5088            .await
5089            .map_err(RusotoError::from)?;
5090        if response.status.is_success() {
5091            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5092            let result = proto::json::ResponsePayload::new(&response)
5093                .deserialize::<ListTagsForResourceResponse, _>()?;
5094
5095            Ok(result)
5096        } else {
5097            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5098            Err(ListTagsForResourceError::from_response(response))
5099        }
5100    }
5101
5102    /// <p>Enable or disable the automatic warm-up feature for dedicated IP addresses.</p>
5103    #[allow(unused_mut)]
5104    async fn put_account_dedicated_ip_warmup_attributes(
5105        &self,
5106        input: PutAccountDedicatedIpWarmupAttributesRequest,
5107    ) -> Result<
5108        PutAccountDedicatedIpWarmupAttributesResponse,
5109        RusotoError<PutAccountDedicatedIpWarmupAttributesError>,
5110    > {
5111        let request_uri = "/v1/email/account/dedicated-ips/warmup";
5112
5113        let mut request = SignedRequest::new("PUT", "ses", &self.region, &request_uri);
5114        request.set_content_type("application/x-amz-json-1.1".to_owned());
5115
5116        request.set_endpoint_prefix("email".to_string());
5117        let encoded = Some(serde_json::to_vec(&input).unwrap());
5118        request.set_payload(encoded);
5119
5120        let mut response = self
5121            .client
5122            .sign_and_dispatch(request)
5123            .await
5124            .map_err(RusotoError::from)?;
5125        if response.status.is_success() {
5126            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5127            let result = proto::json::ResponsePayload::new(&response)
5128                .deserialize::<PutAccountDedicatedIpWarmupAttributesResponse, _>()?;
5129
5130            Ok(result)
5131        } else {
5132            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5133            Err(PutAccountDedicatedIpWarmupAttributesError::from_response(
5134                response,
5135            ))
5136        }
5137    }
5138
5139    /// <p>Enable or disable the ability of your account to send email.</p>
5140    #[allow(unused_mut)]
5141    async fn put_account_sending_attributes(
5142        &self,
5143        input: PutAccountSendingAttributesRequest,
5144    ) -> Result<PutAccountSendingAttributesResponse, RusotoError<PutAccountSendingAttributesError>>
5145    {
5146        let request_uri = "/v1/email/account/sending";
5147
5148        let mut request = SignedRequest::new("PUT", "ses", &self.region, &request_uri);
5149        request.set_content_type("application/x-amz-json-1.1".to_owned());
5150
5151        request.set_endpoint_prefix("email".to_string());
5152        let encoded = Some(serde_json::to_vec(&input).unwrap());
5153        request.set_payload(encoded);
5154
5155        let mut response = self
5156            .client
5157            .sign_and_dispatch(request)
5158            .await
5159            .map_err(RusotoError::from)?;
5160        if response.status.is_success() {
5161            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5162            let result = proto::json::ResponsePayload::new(&response)
5163                .deserialize::<PutAccountSendingAttributesResponse, _>()?;
5164
5165            Ok(result)
5166        } else {
5167            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5168            Err(PutAccountSendingAttributesError::from_response(response))
5169        }
5170    }
5171
5172    /// <p>Associate a configuration set with a dedicated IP pool. You can use dedicated IP pools to create groups of dedicated IP addresses for sending specific types of email.</p>
5173    #[allow(unused_mut)]
5174    async fn put_configuration_set_delivery_options(
5175        &self,
5176        input: PutConfigurationSetDeliveryOptionsRequest,
5177    ) -> Result<
5178        PutConfigurationSetDeliveryOptionsResponse,
5179        RusotoError<PutConfigurationSetDeliveryOptionsError>,
5180    > {
5181        let request_uri = format!(
5182            "/v1/email/configuration-sets/{configuration_set_name}/delivery-options",
5183            configuration_set_name = input.configuration_set_name
5184        );
5185
5186        let mut request = SignedRequest::new("PUT", "ses", &self.region, &request_uri);
5187        request.set_content_type("application/x-amz-json-1.1".to_owned());
5188
5189        request.set_endpoint_prefix("email".to_string());
5190        let encoded = Some(serde_json::to_vec(&input).unwrap());
5191        request.set_payload(encoded);
5192
5193        let mut response = self
5194            .client
5195            .sign_and_dispatch(request)
5196            .await
5197            .map_err(RusotoError::from)?;
5198        if response.status.is_success() {
5199            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5200            let result = proto::json::ResponsePayload::new(&response)
5201                .deserialize::<PutConfigurationSetDeliveryOptionsResponse, _>()?;
5202
5203            Ok(result)
5204        } else {
5205            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5206            Err(PutConfigurationSetDeliveryOptionsError::from_response(
5207                response,
5208            ))
5209        }
5210    }
5211
5212    /// <p>Enable or disable collection of reputation metrics for emails that you send using a particular configuration set in a specific AWS Region.</p>
5213    #[allow(unused_mut)]
5214    async fn put_configuration_set_reputation_options(
5215        &self,
5216        input: PutConfigurationSetReputationOptionsRequest,
5217    ) -> Result<
5218        PutConfigurationSetReputationOptionsResponse,
5219        RusotoError<PutConfigurationSetReputationOptionsError>,
5220    > {
5221        let request_uri = format!(
5222            "/v1/email/configuration-sets/{configuration_set_name}/reputation-options",
5223            configuration_set_name = input.configuration_set_name
5224        );
5225
5226        let mut request = SignedRequest::new("PUT", "ses", &self.region, &request_uri);
5227        request.set_content_type("application/x-amz-json-1.1".to_owned());
5228
5229        request.set_endpoint_prefix("email".to_string());
5230        let encoded = Some(serde_json::to_vec(&input).unwrap());
5231        request.set_payload(encoded);
5232
5233        let mut response = self
5234            .client
5235            .sign_and_dispatch(request)
5236            .await
5237            .map_err(RusotoError::from)?;
5238        if response.status.is_success() {
5239            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5240            let result = proto::json::ResponsePayload::new(&response)
5241                .deserialize::<PutConfigurationSetReputationOptionsResponse, _>()?;
5242
5243            Ok(result)
5244        } else {
5245            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5246            Err(PutConfigurationSetReputationOptionsError::from_response(
5247                response,
5248            ))
5249        }
5250    }
5251
5252    /// <p>Enable or disable email sending for messages that use a particular configuration set in a specific AWS Region.</p>
5253    #[allow(unused_mut)]
5254    async fn put_configuration_set_sending_options(
5255        &self,
5256        input: PutConfigurationSetSendingOptionsRequest,
5257    ) -> Result<
5258        PutConfigurationSetSendingOptionsResponse,
5259        RusotoError<PutConfigurationSetSendingOptionsError>,
5260    > {
5261        let request_uri = format!(
5262            "/v1/email/configuration-sets/{configuration_set_name}/sending",
5263            configuration_set_name = input.configuration_set_name
5264        );
5265
5266        let mut request = SignedRequest::new("PUT", "ses", &self.region, &request_uri);
5267        request.set_content_type("application/x-amz-json-1.1".to_owned());
5268
5269        request.set_endpoint_prefix("email".to_string());
5270        let encoded = Some(serde_json::to_vec(&input).unwrap());
5271        request.set_payload(encoded);
5272
5273        let mut response = self
5274            .client
5275            .sign_and_dispatch(request)
5276            .await
5277            .map_err(RusotoError::from)?;
5278        if response.status.is_success() {
5279            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5280            let result = proto::json::ResponsePayload::new(&response)
5281                .deserialize::<PutConfigurationSetSendingOptionsResponse, _>()?;
5282
5283            Ok(result)
5284        } else {
5285            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5286            Err(PutConfigurationSetSendingOptionsError::from_response(
5287                response,
5288            ))
5289        }
5290    }
5291
5292    /// <p>Specify a custom domain to use for open and click tracking elements in email that you send using Amazon Pinpoint.</p>
5293    #[allow(unused_mut)]
5294    async fn put_configuration_set_tracking_options(
5295        &self,
5296        input: PutConfigurationSetTrackingOptionsRequest,
5297    ) -> Result<
5298        PutConfigurationSetTrackingOptionsResponse,
5299        RusotoError<PutConfigurationSetTrackingOptionsError>,
5300    > {
5301        let request_uri = format!(
5302            "/v1/email/configuration-sets/{configuration_set_name}/tracking-options",
5303            configuration_set_name = input.configuration_set_name
5304        );
5305
5306        let mut request = SignedRequest::new("PUT", "ses", &self.region, &request_uri);
5307        request.set_content_type("application/x-amz-json-1.1".to_owned());
5308
5309        request.set_endpoint_prefix("email".to_string());
5310        let encoded = Some(serde_json::to_vec(&input).unwrap());
5311        request.set_payload(encoded);
5312
5313        let mut response = self
5314            .client
5315            .sign_and_dispatch(request)
5316            .await
5317            .map_err(RusotoError::from)?;
5318        if response.status.is_success() {
5319            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5320            let result = proto::json::ResponsePayload::new(&response)
5321                .deserialize::<PutConfigurationSetTrackingOptionsResponse, _>()?;
5322
5323            Ok(result)
5324        } else {
5325            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5326            Err(PutConfigurationSetTrackingOptionsError::from_response(
5327                response,
5328            ))
5329        }
5330    }
5331
5332    /// <p><p>Move a dedicated IP address to an existing dedicated IP pool.</p> <note> <p>The dedicated IP address that you specify must already exist, and must be associated with your Amazon Pinpoint account. </p> <p>The dedicated IP pool you specify must already exist. You can create a new pool by using the <code>CreateDedicatedIpPool</code> operation.</p> </note></p>
5333    #[allow(unused_mut)]
5334    async fn put_dedicated_ip_in_pool(
5335        &self,
5336        input: PutDedicatedIpInPoolRequest,
5337    ) -> Result<PutDedicatedIpInPoolResponse, RusotoError<PutDedicatedIpInPoolError>> {
5338        let request_uri = format!("/v1/email/dedicated-ips/{ip}/pool", ip = input.ip);
5339
5340        let mut request = SignedRequest::new("PUT", "ses", &self.region, &request_uri);
5341        request.set_content_type("application/x-amz-json-1.1".to_owned());
5342
5343        request.set_endpoint_prefix("email".to_string());
5344        let encoded = Some(serde_json::to_vec(&input).unwrap());
5345        request.set_payload(encoded);
5346
5347        let mut response = self
5348            .client
5349            .sign_and_dispatch(request)
5350            .await
5351            .map_err(RusotoError::from)?;
5352        if response.status.is_success() {
5353            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5354            let result = proto::json::ResponsePayload::new(&response)
5355                .deserialize::<PutDedicatedIpInPoolResponse, _>()?;
5356
5357            Ok(result)
5358        } else {
5359            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5360            Err(PutDedicatedIpInPoolError::from_response(response))
5361        }
5362    }
5363
5364    /// <p><p/></p>
5365    #[allow(unused_mut)]
5366    async fn put_dedicated_ip_warmup_attributes(
5367        &self,
5368        input: PutDedicatedIpWarmupAttributesRequest,
5369    ) -> Result<
5370        PutDedicatedIpWarmupAttributesResponse,
5371        RusotoError<PutDedicatedIpWarmupAttributesError>,
5372    > {
5373        let request_uri = format!("/v1/email/dedicated-ips/{ip}/warmup", ip = input.ip);
5374
5375        let mut request = SignedRequest::new("PUT", "ses", &self.region, &request_uri);
5376        request.set_content_type("application/x-amz-json-1.1".to_owned());
5377
5378        request.set_endpoint_prefix("email".to_string());
5379        let encoded = Some(serde_json::to_vec(&input).unwrap());
5380        request.set_payload(encoded);
5381
5382        let mut response = self
5383            .client
5384            .sign_and_dispatch(request)
5385            .await
5386            .map_err(RusotoError::from)?;
5387        if response.status.is_success() {
5388            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5389            let result = proto::json::ResponsePayload::new(&response)
5390                .deserialize::<PutDedicatedIpWarmupAttributesResponse, _>()?;
5391
5392            Ok(result)
5393        } else {
5394            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5395            Err(PutDedicatedIpWarmupAttributesError::from_response(response))
5396        }
5397    }
5398
5399    /// <p>Enable or disable the Deliverability dashboard for your Amazon Pinpoint account. When you enable the Deliverability dashboard, you gain access to reputation, deliverability, and other metrics for the domains that you use to send email using Amazon Pinpoint. You also gain the ability to perform predictive inbox placement tests.</p> <p>When you use the Deliverability dashboard, you pay a monthly subscription charge, in addition to any other fees that you accrue by using Amazon Pinpoint. For more information about the features and cost of a Deliverability dashboard subscription, see <a href="http://aws.amazon.com/pinpoint/pricing/">Amazon Pinpoint Pricing</a>.</p>
5400    #[allow(unused_mut)]
5401    async fn put_deliverability_dashboard_option(
5402        &self,
5403        input: PutDeliverabilityDashboardOptionRequest,
5404    ) -> Result<
5405        PutDeliverabilityDashboardOptionResponse,
5406        RusotoError<PutDeliverabilityDashboardOptionError>,
5407    > {
5408        let request_uri = "/v1/email/deliverability-dashboard";
5409
5410        let mut request = SignedRequest::new("PUT", "ses", &self.region, &request_uri);
5411        request.set_content_type("application/x-amz-json-1.1".to_owned());
5412
5413        request.set_endpoint_prefix("email".to_string());
5414        let encoded = Some(serde_json::to_vec(&input).unwrap());
5415        request.set_payload(encoded);
5416
5417        let mut response = self
5418            .client
5419            .sign_and_dispatch(request)
5420            .await
5421            .map_err(RusotoError::from)?;
5422        if response.status.is_success() {
5423            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5424            let result = proto::json::ResponsePayload::new(&response)
5425                .deserialize::<PutDeliverabilityDashboardOptionResponse, _>()?;
5426
5427            Ok(result)
5428        } else {
5429            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5430            Err(PutDeliverabilityDashboardOptionError::from_response(
5431                response,
5432            ))
5433        }
5434    }
5435
5436    /// <p>Used to enable or disable DKIM authentication for an email identity.</p>
5437    #[allow(unused_mut)]
5438    async fn put_email_identity_dkim_attributes(
5439        &self,
5440        input: PutEmailIdentityDkimAttributesRequest,
5441    ) -> Result<
5442        PutEmailIdentityDkimAttributesResponse,
5443        RusotoError<PutEmailIdentityDkimAttributesError>,
5444    > {
5445        let request_uri = format!(
5446            "/v1/email/identities/{email_identity}/dkim",
5447            email_identity = input.email_identity
5448        );
5449
5450        let mut request = SignedRequest::new("PUT", "ses", &self.region, &request_uri);
5451        request.set_content_type("application/x-amz-json-1.1".to_owned());
5452
5453        request.set_endpoint_prefix("email".to_string());
5454        let encoded = Some(serde_json::to_vec(&input).unwrap());
5455        request.set_payload(encoded);
5456
5457        let mut response = self
5458            .client
5459            .sign_and_dispatch(request)
5460            .await
5461            .map_err(RusotoError::from)?;
5462        if response.status.is_success() {
5463            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5464            let result = proto::json::ResponsePayload::new(&response)
5465                .deserialize::<PutEmailIdentityDkimAttributesResponse, _>()?;
5466
5467            Ok(result)
5468        } else {
5469            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5470            Err(PutEmailIdentityDkimAttributesError::from_response(response))
5471        }
5472    }
5473
5474    /// <p>Used to enable or disable feedback forwarding for an identity. This setting determines what happens when an identity is used to send an email that results in a bounce or complaint event.</p> <p>When you enable feedback forwarding, Amazon Pinpoint sends you email notifications when bounce or complaint events occur. Amazon Pinpoint sends this notification to the address that you specified in the Return-Path header of the original email.</p> <p>When you disable feedback forwarding, Amazon Pinpoint sends notifications through other mechanisms, such as by notifying an Amazon SNS topic. You're required to have a method of tracking bounces and complaints. If you haven't set up another mechanism for receiving bounce or complaint notifications, Amazon Pinpoint sends an email notification when these events occur (even if this setting is disabled).</p>
5475    #[allow(unused_mut)]
5476    async fn put_email_identity_feedback_attributes(
5477        &self,
5478        input: PutEmailIdentityFeedbackAttributesRequest,
5479    ) -> Result<
5480        PutEmailIdentityFeedbackAttributesResponse,
5481        RusotoError<PutEmailIdentityFeedbackAttributesError>,
5482    > {
5483        let request_uri = format!(
5484            "/v1/email/identities/{email_identity}/feedback",
5485            email_identity = input.email_identity
5486        );
5487
5488        let mut request = SignedRequest::new("PUT", "ses", &self.region, &request_uri);
5489        request.set_content_type("application/x-amz-json-1.1".to_owned());
5490
5491        request.set_endpoint_prefix("email".to_string());
5492        let encoded = Some(serde_json::to_vec(&input).unwrap());
5493        request.set_payload(encoded);
5494
5495        let mut response = self
5496            .client
5497            .sign_and_dispatch(request)
5498            .await
5499            .map_err(RusotoError::from)?;
5500        if response.status.is_success() {
5501            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5502            let result = proto::json::ResponsePayload::new(&response)
5503                .deserialize::<PutEmailIdentityFeedbackAttributesResponse, _>()?;
5504
5505            Ok(result)
5506        } else {
5507            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5508            Err(PutEmailIdentityFeedbackAttributesError::from_response(
5509                response,
5510            ))
5511        }
5512    }
5513
5514    /// <p>Used to enable or disable the custom Mail-From domain configuration for an email identity.</p>
5515    #[allow(unused_mut)]
5516    async fn put_email_identity_mail_from_attributes(
5517        &self,
5518        input: PutEmailIdentityMailFromAttributesRequest,
5519    ) -> Result<
5520        PutEmailIdentityMailFromAttributesResponse,
5521        RusotoError<PutEmailIdentityMailFromAttributesError>,
5522    > {
5523        let request_uri = format!(
5524            "/v1/email/identities/{email_identity}/mail-from",
5525            email_identity = input.email_identity
5526        );
5527
5528        let mut request = SignedRequest::new("PUT", "ses", &self.region, &request_uri);
5529        request.set_content_type("application/x-amz-json-1.1".to_owned());
5530
5531        request.set_endpoint_prefix("email".to_string());
5532        let encoded = Some(serde_json::to_vec(&input).unwrap());
5533        request.set_payload(encoded);
5534
5535        let mut response = self
5536            .client
5537            .sign_and_dispatch(request)
5538            .await
5539            .map_err(RusotoError::from)?;
5540        if response.status.is_success() {
5541            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5542            let result = proto::json::ResponsePayload::new(&response)
5543                .deserialize::<PutEmailIdentityMailFromAttributesResponse, _>()?;
5544
5545            Ok(result)
5546        } else {
5547            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5548            Err(PutEmailIdentityMailFromAttributesError::from_response(
5549                response,
5550            ))
5551        }
5552    }
5553
5554    /// <p><p>Sends an email message. You can use the Amazon Pinpoint Email API to send two types of messages:</p> <ul> <li> <p> <b>Simple</b> – A standard email message. When you create this type of message, you specify the sender, the recipient, and the message body, and Amazon Pinpoint assembles the message for you.</p> </li> <li> <p> <b>Raw</b> – A raw, MIME-formatted email message. When you send this type of email, you have to specify all of the message headers, as well as the message body. You can use this message type to send messages that contain attachments. The message that you specify has to be a valid MIME message.</p> </li> </ul></p>
5555    #[allow(unused_mut)]
5556    async fn send_email(
5557        &self,
5558        input: SendEmailRequest,
5559    ) -> Result<SendEmailResponse, RusotoError<SendEmailError>> {
5560        let request_uri = "/v1/email/outbound-emails";
5561
5562        let mut request = SignedRequest::new("POST", "ses", &self.region, &request_uri);
5563        request.set_content_type("application/x-amz-json-1.1".to_owned());
5564
5565        request.set_endpoint_prefix("email".to_string());
5566        let encoded = Some(serde_json::to_vec(&input).unwrap());
5567        request.set_payload(encoded);
5568
5569        let mut response = self
5570            .client
5571            .sign_and_dispatch(request)
5572            .await
5573            .map_err(RusotoError::from)?;
5574        if response.status.is_success() {
5575            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5576            let result = proto::json::ResponsePayload::new(&response)
5577                .deserialize::<SendEmailResponse, _>()?;
5578
5579            Ok(result)
5580        } else {
5581            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5582            Err(SendEmailError::from_response(response))
5583        }
5584    }
5585
5586    /// <p>Add one or more tags (keys and values) to a specified resource. A <i>tag</i> is a label that you optionally define and associate with a resource in Amazon Pinpoint. Tags can help you categorize and manage resources in different ways, such as by purpose, owner, environment, or other criteria. A resource can have as many as 50 tags.</p> <p>Each tag consists of a required <i>tag key</i> and an associated <i>tag value</i>, both of which you define. A tag key is a general label that acts as a category for more specific tag values. A tag value acts as a descriptor within a tag key.</p>
5587    #[allow(unused_mut)]
5588    async fn tag_resource(
5589        &self,
5590        input: TagResourceRequest,
5591    ) -> Result<TagResourceResponse, RusotoError<TagResourceError>> {
5592        let request_uri = "/v1/email/tags";
5593
5594        let mut request = SignedRequest::new("POST", "ses", &self.region, &request_uri);
5595        request.set_content_type("application/x-amz-json-1.1".to_owned());
5596
5597        request.set_endpoint_prefix("email".to_string());
5598        let encoded = Some(serde_json::to_vec(&input).unwrap());
5599        request.set_payload(encoded);
5600
5601        let mut response = self
5602            .client
5603            .sign_and_dispatch(request)
5604            .await
5605            .map_err(RusotoError::from)?;
5606        if response.status.is_success() {
5607            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5608            let result = proto::json::ResponsePayload::new(&response)
5609                .deserialize::<TagResourceResponse, _>()?;
5610
5611            Ok(result)
5612        } else {
5613            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5614            Err(TagResourceError::from_response(response))
5615        }
5616    }
5617
5618    /// <p>Remove one or more tags (keys and values) from a specified resource.</p>
5619    #[allow(unused_mut)]
5620    async fn untag_resource(
5621        &self,
5622        input: UntagResourceRequest,
5623    ) -> Result<UntagResourceResponse, RusotoError<UntagResourceError>> {
5624        let request_uri = "/v1/email/tags";
5625
5626        let mut request = SignedRequest::new("DELETE", "ses", &self.region, &request_uri);
5627        request.set_content_type("application/x-amz-json-1.1".to_owned());
5628
5629        request.set_endpoint_prefix("email".to_string());
5630
5631        let mut params = Params::new();
5632        params.put("ResourceArn", &input.resource_arn);
5633        for item in input.tag_keys.iter() {
5634            params.put("TagKeys", item);
5635        }
5636        request.set_params(params);
5637
5638        let mut response = self
5639            .client
5640            .sign_and_dispatch(request)
5641            .await
5642            .map_err(RusotoError::from)?;
5643        if response.status.is_success() {
5644            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5645            let result = proto::json::ResponsePayload::new(&response)
5646                .deserialize::<UntagResourceResponse, _>()?;
5647
5648            Ok(result)
5649        } else {
5650            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5651            Err(UntagResourceError::from_response(response))
5652        }
5653    }
5654
5655    /// <p>Update the configuration of an event destination for a configuration set.</p> <p>In Amazon Pinpoint, <i>events</i> include message sends, deliveries, opens, clicks, bounces, and complaints. <i>Event destinations</i> are places that you can send information about these events to. For example, you can send event data to Amazon SNS to receive notifications when you receive bounces or complaints, or you can use Amazon Kinesis Data Firehose to stream data to Amazon S3 for long-term storage.</p>
5656    #[allow(unused_mut)]
5657    async fn update_configuration_set_event_destination(
5658        &self,
5659        input: UpdateConfigurationSetEventDestinationRequest,
5660    ) -> Result<
5661        UpdateConfigurationSetEventDestinationResponse,
5662        RusotoError<UpdateConfigurationSetEventDestinationError>,
5663    > {
5664        let request_uri = format!("/v1/email/configuration-sets/{configuration_set_name}/event-destinations/{event_destination_name}", configuration_set_name = input.configuration_set_name, event_destination_name = input.event_destination_name);
5665
5666        let mut request = SignedRequest::new("PUT", "ses", &self.region, &request_uri);
5667        request.set_content_type("application/x-amz-json-1.1".to_owned());
5668
5669        request.set_endpoint_prefix("email".to_string());
5670        let encoded = Some(serde_json::to_vec(&input).unwrap());
5671        request.set_payload(encoded);
5672
5673        let mut response = self
5674            .client
5675            .sign_and_dispatch(request)
5676            .await
5677            .map_err(RusotoError::from)?;
5678        if response.status.is_success() {
5679            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5680            let result = proto::json::ResponsePayload::new(&response)
5681                .deserialize::<UpdateConfigurationSetEventDestinationResponse, _>()?;
5682
5683            Ok(result)
5684        } else {
5685            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
5686            Err(UpdateConfigurationSetEventDestinationError::from_response(
5687                response,
5688            ))
5689        }
5690    }
5691}